Základy regulárních výrazů: Průvodce pro začátečníky
Regulární výrazy, občas označované jako RegEx, mohou být na první pohled matoucí. Ale nebojte se, po přečtení tohoto průvodce si osvojíte jejich základy a budete je moci s jistotou používat.
Společně prozkoumáme svět regulárních výrazů a rozklíčujeme na první pohled složitě vypadající sekvence znaků. Naučíme se, co jednotlivé symboly znamenají a jak je kombinovat, abychom dosáhli požadovaných výsledků.
Na konci tohoto článku budete schopni nejen číst regulární výrazy, ale i sami je vytvářet pro různé účely. Kromě toho vám představíme užitečné online nástroje, které vám pomohou s testováním a laděním vašich výrazů.
Co jsou regulární výrazy?
Regulární výraz (RegEx) je v podstatě sekvence znaků, která definuje vzor pro vyhledávání a manipulaci s textem. Je to mocný nástroj pro práci s textovými daty.
Například, pokud potřebujeme zjistit, zda text obsahuje slovo „banán“, použijeme regulární výraz /banán/
. Stejně tak výraz /[0-9]/
ověří, zda text obsahuje alespoň jednu číslici od 0 do 9.
Kde se regulární výrazy používají?
Regulární výrazy nacházejí široké uplatnění v moderních webových technologiích. Používají se pro validaci vstupů ve webových formulářích, ve vyhledávačích, v lexikálních analyzátorech v IDE, v textových editorech a dalších aplikacích pro práci s textem.
Každý z nás jistě několikrát použil klávesovou zkratku „Ctrl+F“ k vyhledání slova či fráze v dokumentu. I toto je v podstatě použití jednoduchého regulárního výrazu.
Než se vrhneme na detaily, podívejme se na jeden běžně používaný regulární výraz:
Dokážete uhodnout, k čemu slouží tento RegEx? 🤔
^([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z]{2,5})$
Pokud ne, nezoufejte! Po prostudování tohoto článku budete schopni tento i jiné výrazy s lehkostí dešifrovat.
Začněme s abecedou regulárních výrazů.
Základní stavební kameny – Tokeny
Podívejme se na jednotlivé symboly, z nichž se skládají regulární výrazy. V následující tabulce si rozklíčujeme tokeny z uvedeného příkladu:
^([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z]{2,5})$
Regulární výrazy jsou postaveny z mnoha znaků a symbolů, kterým říkáme tokeny. Pojďme si je blíže prozkoumat:
Token | Význam |
^ | Označuje začátek řetězce. |
(…) | Vytváří skupinu, zachycuje to, co je uvnitř závorek. |
[…] | Definuje množinu znaků, kde se může objevit kterýkoliv z nich. Např. [abc] odpovídá buď a, nebo b, nebo c. |
a-z | Malá písmena abecedy od a do z. RegEx rozlišuje velká a malá písmena. |
A-Z | Velká písmena abecedy od A do Z. |
0-9 | Číslice od 0 do 9. |
_ | Odpovídá znaku podtržítko. |
\. | Odpovídá znaku tečka. Zpětné lomítko před tečkou značí, že tečka nemá speciální význam (odpovídající libovolnému znaku). |
+ | Kvantifikátor. Odpovídá jednomu nebo více výskytům předchozího znaku. Např. a+ odpovídá jednomu nebo více a. |
– | Odpovídá znaku spojovník. |
@ | Odpovídá znaku zavináč. |
{ } | Kvantifikátor. Určuje počet výskytů předchozího znaku. Např. a{3} odpovídá přesně třem a. |
$ | Označuje konec řetězce. |
Rozbor ukázkového RegEx výrazu
S těmito znalostmi se podívejme na náš ukázkový výraz a rozeberme ho krok za krokem:
- ^([a-zA-Z0-9_-.]+) znamená, že hledáme řetězec, který začíná alespoň jedním znakem, který je alfanumerický (a-z, A-Z, 0-9), podtržítko, spojovník nebo tečka. Příkladem je např. uživatelské_jméno.01. Není nutné zahrnout všechny vyjmenované znaky, stačí jeden z nich.
- Znak
@
odpovídá znaku zavináč. V našem příkladu by se hodilo něco jako [email protected] - ([a-zA-Z0-9_-.]+) je obdobný jako první část. Vyhledáváme řetězec, který obsahuje alespoň jeden znak z alfanumerických znaků, podtržítek, spojovníků nebo teček. Např. [email protected]
- Jak už možná tušíte, definujeme vzor pro e-mailovou adresu. Dalším znakem je
\.
, který odpovídá znaku tečka. Pokud budeme pokračovat, dostaneme se k [email protected]. - ([a-zA-Z]{2,5})$ znamená, že řetězec by měl končit 2 až 5 abecedními znaky, ať už velkými či malými. Pokud k předchozímu přidáme .cz, vyjde nám [email protected], což je běžný formát e-mailu.
Spojením všech těchto částí získáme regulární výraz pro ověření e-mailové adresy. Můžeme jej použít k validaci, zda je zadaná e-mailová adresa platná.
Důležité: Tento výraz pokrývá nejběžnější formáty e-mailových adres.
Kategorie tokenů
V rámci regulárních výrazů existuje celá řada tokenů, které můžeme různě kombinovat a dosahovat tak komplexních vzorů. Podívejme se na různé kategorie tokenů, počínaje těmi základními.
Základní tokeny
Tyto tokeny se používají prakticky v každém regulárním výrazu, proto je důležité si je osvojit:
Token | Význam |
\r | Odpovídá znaku návratu vozíku. |