Regulární výrazy slouží ke zpracování textových řetězců. Pomocí regulárních výrazů si určíme masku a poté zjišťujeme, zda daný textový řetězec této masce vyhovuje. To znamená, že textový řetězec musí obsahovat stejné znaky jako regulární výraz. Při vytváření regulárních výrazů se velice často uplatní tzv. metaznaky.

Začněme regulárním výrazem bez metaznaků. Regulárnímu výrazu ‚xxx‘ vyhoví všechny řetězce obsahující tento text. Např. xxx nebo aaxxxbb.

Základními metaznaky jsou ‚^‘ a ‚$‘. První označuje začátek řetězce, druhý naopak konec řetězce. Vše si opět předvedeme na příkladě.

Regulárnímu výrazu ‚^xxx‘ vyhoví pouze řetězce začínající na daný text, např. xxx nebo xxxaabb. Naopak regulárnímu výrazu ‚xxx$‘ (pozor metaznak ‚$‘ se zapisuje na konec výrazu) vyhoví pouze řetězce končící na zadaný text, např. xxx nebo aabbxxx.

Dalším metaznakem je ‚.‘, ta označuje jeden libovolný znak. Takže regulárnímu výrazu ‚x.x‘ vyhovují např. řetězce obsahující xxx, xax, ale i x x.

Metaznaky ‚*‘, ‚+‘ a ‚?‘ určují kolikrát se má výraz uvedený před nimi opakovat. Metaznak ‚*‘ značí, že se výraz může opakovat kolikrát chce (ale nemusí být přítomný vůbec). Metaznak ‚+‘ říká, že se výraz před ním musí opakovat alespoň jednou a poslední metaznak v této kategorii ‚?‘ říká, že se výraz před ním může opakovat nejvýše jednou.

Např. regulárnímu výrazu ‚.*‘ vyhoví jakýkoli řetězec, i prázdný, protože metaznak ‚.‘ zastupuje libovolný znak, který se může opakovat kolikrát chce, což nám vyjadřuje metaznak ‚*‘.

Regulárnímu výrazu ‚xa+b‘ vyhoví např. xab, xaab nebo xaaaaaaaaab, ale i yrffxaaaabjd, jelikož mezi znaky ‚x‘ a ‚b‘ se musí objevit znak ‚a‘, a to alespoň jednou.

Regulární výrazu ‚xa?b‘ vyhoví pouze řetězce obsahující xab nebo xb, protože mezi znaky ‚x‘ a ‚b‘ se může objevit nejvýše jeden znak ‚a‘.

Jak je vidět z uvedených příkladů, metaznaky ‚*‘, ‚+‘ a ‚?‘ způsobí opakování jediného znaku. Často však potřebujeme zajistit opakování několika znaků. To vyřešíme pomocí závorek ‚()‘.

Regulárnímu výrazu ‚a(xb)+a‘ vyhoví řetězce obsahující např. axba nebo axbxbxba. Mezi dvěma znaky ‚a‘ se musí opakovat nenulový počet znaků ‚xb‘.

Naopak regulárnímu výrazu ‚a(xb)?a‘ vyhoví pouze řetězce obsahující aa nebo axba.

Jestliže chceme určit ještě přesněji, kolikrát se má výraz opakovat použijeme metaznaky ‚{‚ a ‚}‘. Uvnitř těchto složených závorek pak napíšeme kolikrát minimálně a kolikrát maximálně se má výraz uvedený před nimi opakovat.

Regulárnímu výrazu ‚x{5,10}‘ vyhoví řetězce obsahující 5-10 znaků ‚x‘ zapsaných za sebou.

Vyzkoušíme i kombinaci kulatých a složených závorek. Regulárnímu výrazu ‚(xb){2,5}‘ vyhoví takové řetězce, kde se ‚xb‘ opakuje min. 2krát a max. 5krát. Např. ty co obsahují xbxb nebo xbxbxbxb.

Pokud chceme určit kolikrát minimálně se má znak opakovat použijeme opět složené závorky, kam zapíšeme min. počet opakování a čárku.

Výrazu ‚x{5,}‘ vyhoví řetězce, kde se znak ‚x‘ opakuje minimálně 5krát za sebou.

Potřebujeme-li určit, že znak se má opakovat přesně n-krát, do složených závorek zapíšeme číslo n.

Např. výrazu ‚(xb){3}‘ vyhoví pouze řetězec obsahující xbxbxb.

Poznámka: jestliže potřebujeme použít metaznak v jeho původním významu, dáme před něj ‚\’¨. Např. chceme-li vyhledat řetězec ‚^.?}(‚, použijeme regulární výraz ‚\^\.\?\}\(‚.

To by prozatím stačilo, příště se představíme ještě několik dalších metaznaků a ukážeme si funkce, které nám slouží ke zpracování regulárních výrazů.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět