^[[:alnum:]._-]+@[[:alnum:].-]+$
Na prvý pohľad by sa mohlo zdať, že prvý riadok tohto článku pravdepodobne napísala mačka, ktorá sa rozhodla skrátiť si dlhú chvíľu prechádzkou po klávesnici, nikto si to nevšimol a článok sme publikovali. Alebo si niekto svoj hnev vylial búchaním po klávesnici, a takýto výsledok sa dostavil.
V skutočnosti je to ale veľmi užitočná a logická sekvencia znakov. Pomocou tohto výrazu si môžeme veľmi jednoducho overiť, či užívateľ zadal e-mail v správnom tvare, alebo sa pomýlil, či náročky zadal nesprávnu e-mailovú adresu. Koľkokrát ste si už povedali:
– Kiežby môj obľúbený BI nástroj zvládal RegEx!
Či už je vaša odpoveď “Nespočetne veľakrát!” alebo “Reg… čože?”, čítajte ďalej. V mojej novej sérii blogov si vysvetlíme si čo sú to regulárne výrazy, prečo by ste sa o ne mali zaujímať, a tiež to, ako RegEx dostať do Qlik Sense. Povieme si tiež niečo o základných použitiach v oblasti BI a dátovej analytiky.
Zrejme to poznáte…
Je pondelok. Po rannej káve prechádzate neprečítané e-maily, a zrazu na vás vyskočí jeden s vysokou prioritou:
Platnosť Vášho hesla vyprší o 1 deň. Pre zmenu hesla…
Je najvyšší čas (po 2 týždňoch) prestať tento e-mail ignorovať. Pripravte sa na najbližšie 3 dni, kedy sa jednoducho neprihlásite na prvý pokus, pretože staré heslo máte už vo vašich prstoch príliš zautomatizované. Takže nastal čas vymyslieť nové heslo. Chce to niečo jednoduché a zapamätateľné: ahoj5 sa zdá ako ideálna možnosť, pretože aktuálne heslo je ahoj4, heslo predtým ahoj3, heslo predtým… Asi všetci vieme kam tým smerujem. Niečo ale nie je v poriadku a systém naše sofistikované heslo domieta.
Vaše nové heslo nespĺňa požiadavky bezpečnosti. Skúste zvoliť iné. Heslo musí:
1. byť dlhé aspoň 8 znakov
2. obsahovať aspoň 2 veľké písmená
3. obsahovať aspoň 1 malé písmeno
4. obsahovať aspoň 1 číslo
5. obsahovať aspoň 1 špeciálny znak !, @, #, $, & alebo *
Ako systém vie, že heslo nespĺňa dané požiadavky? Existuje nejaká databáza všetkých možných kombinácií? Veď to je nekonečne veľa možností! Čo sú to za čary?
Žiadne čary, len obyčajné regulárne výrazy, alebo RegEx (Regular Expression).
Čo sú to regulárne výrazy?
Regulárne výrazy sú sekvencie znakov, ktoré definujú štruktúru textového reťazca. Majú špeciálnu syntax, kde sú špeciálne znaky, ktoré zastupuju nejakú triedu znakov (napríklad * alebo ?) a potom sú tam štandardné znaky, ktoré majú doslovný význam. V Qliku ste už pravdepodobne použili ?, ^ a * pri vyhľadávaní, alebo pri použití funkcie WildMatch().
? zastupuje akýkoľvek 1 znak, vrátane prázdného znaku (napríklad medzera).
* zastupuje 0 alebo viac akýchkoľvek znakov, vrátane prázdného znaku (napríklad medzera).
^ zastupuje začiatok slova v rámci hodnoty.
Ak chceme napríklad vybrať všetky firmy začínajúce na písmeno ‘A’, napíšeme do vyhľadávacieho okna ‘A*’.
A predstavuje štandarný znak ‘A’ v texte.
* je zástupný znak. Znamená to, že za písmenom ‘A’ môže byť 0 alebo ľubovoľný počet znakov. Výrazu ‘A*’ by zodpovedali napríklad možnosti A, Abc, Alpha1, A team, a podobne.
Žiaľ, Qlik nemá viac možností pokiaľ ide o takéto zástupné znaky. Ak sa ale Qlik integruje s R, alebo Python, otvorí sa vám úplne nový vesmír plný nekonečného množstva možností a kombinácií a práca s textami bude oveľa jednoduchšia. Môžete si potom vytvoriť naprílad takýto nástroj na vyhodnotenie sily hesla:
Rozbor regulárneho výrazu
V predchádzajúcom príklade sme použili R knižnicu stringr a funkciu str_detect(). V budúcom článku si povieme viac o použití a syntaxi týchto funkcií v Qliku. Dnes si rozoberieme regulárny výraz, ktorý sme na kontrolu sily hesla použili.
1. Heslo musí mať dĺžku aspoň 8 znakov: .{8,}
. zastupuje akýkoľvek znak
{8,} je kvantifikátor a predstavuje 8 až nekonečne veľa opakovaní predošlého znaku
2.Heslo musí obsahovať aspoň 2 veľké písmená (a nemusia ísť po sebe): [A-Z].*[A-Z]
[A-Z] zastupuje znak zo zoznamu A-Z (case sensitive)
. zastupuje akýkoľvek znak
* je kvantifikátor a predstavuje 0 až nekonečne veľa opakovaní predošlého znaku
3. Heslo musí obsahovať aspoň 1 malé písmeno: [a-z]
[a-z] zastupuje znak zo zoznamu a-z (case sensitive)
4. Heslo musí obsahovať aspoň 1 číslo: \d
\d zastupuje číslicu v rozsahu 0-9
5. Heslo musí obsahovať aspoň 1 špeciálny znak !@#$&*: [!@#$&*]
[!@#$&*] zastupuje znak zo zoznamu !, @, #, $, & a *
Extrakcia hypertextových odkazov
Použite regulárnych výrazov na overenie hesla je časté, ale nie veľmi použiteľné v Qlik aplikáciach. Poďme sa teda pozrieť na niečo užitočnejšie. Chceme napríklad vybrať všetky hypertextové odkazy zo súvislého textu. Môžeme na to použiť napríklad tento výraz:
http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+
V tomto príklade sme skopírovali zdrojový text z Wikipedie. Sú v ňom skryté 3 odkazy. Pomocou vyššie uvedeného výrazu vieme extrahovať tieto odkazy do tabuľky. Ak zmením výraz napríklad na \d+, v tabuľke sa mi objaví prvých 10 výskytov čísel v texte.
Prečo by sa mal dátový analytik zaujímať o RegEx?
Dáta sú vo svojom prirodzenom prostredí divoké a pred použitím ich musíme skrotiť. Regularne výrazy nám môžu pomôcť:
- Hľadať chyby v dátach: E-mailové adresy, IP adresy, telefónne čísla atď. Tieto všetky majú špecifikovateľnú štruktúru a môžeme na ne aplikovať kontrolu pomocou RegEx.
- Analyzovať dáta, ktoré nie sú usporiadané v tabuľkách: Pokiaľ chcete analyzovať logy alebo skripty, RegEx je nenahraditeľný pomocník.
- Vyhľadávať citlivé dáta: Adresy, e-maily, telefónne čísla, IBAN a podobne nemôžu byť prístupné komukoľvek. Pomocou definovaných regulárnych výrazov ich viete rýchlo hľadať v rozsiahlych dátových zdrojoch.
V nasledujúcom článku si prejdeme technicky ako funguje integrácia regulárnych výrazov do Qliku z R a podrobne si prejdeme a vysvetlíme 2 príklady uvedené v tomto článku.
Viac informácií o riešení Qlik Sense nájdete TU