banan webhosting   Inteligentní plastelína - nejlepší hračka pro dospělé.

Základy regulárních výrazů

Pokud vám pojem regulární výrazy skutečně mnoho neříká, může vám jako první přiblížení pomoci srování se zástupnými znaky * a ?, které můžete znát už z DOSu (ikdyž za chvíli mladší ročníky už nebudou vědět o čem že to tu mluvím;-)) nebo všelijakých jiných nástrojů. Regulární výrazy disponují mnohem více speciálními znaky než * a ?. Speciální znaky v regulárních výrazech nazýváme metaznaky.

V regulárních výrazech existuje několik typů metaznaků.

Následující tabulky zobrazují seznam kvantifikátorů a hranic.

Kvantifikátory

KvantifikátorPočet opakování
?minimálně 0krát, maximálně 1krát
*minimálně 0krát (maximálně neomezeno)
+minimálně 1krát (maximálně neomezeno)
{n}právě nkrát
{m,n}minimálně mkrát, maximálně nkrát
{m,}minimálně mkrát (maximálně neomezeno)

Pro pořádek ještě dopním, že existují tzv. liné kvantifikátory – ty se od výše zmíněných (tzv. nenasytných) liší v zápisu tak, že výše uvedený kvantifikátor zprava doplníme o otazník (?). Líné kvantifikátory tedy budou ??, *?, +?, {m,n}? a {m,}?.

Funkčně se budou líné kvantifikátory (od v tabulce uvedených nenasytných kvantifikátorů) lišit v tom, že pomocí líných kvantifikátorů je zachycen minimální počet znaků, které je třeba zachytit, aby došlo ke shodě s regulárním výrazem. Nenasytné kvantifikátory naopak zachytí co možná největší počet znaků vstupního textu.

Předdefinované skupiny znaků

\dčíslice 0-9
\Djakýkoliv znak kromě číslic 0-9
\wznaky „slova” (ekvivalentní zápisu [a-zA-Z0-9_])
\Wjakýkoliv znak kromě znaků „slova” (ekvivalentní zápisu [^a-zA-Z0-9_])
\s„bílé” znaky (mezera, tabulátor, znaky pro zalomení řádků)
\Sjakýkoliv znak kromě „bílých” znaků

Hranice

^začátek řetězce (textu v němž se vyhledává)
$konec řetězce (textu v němž se vyhledává)

Původní význam speciálních znaků (metaznaků)

Možná vás napadlo, že když určité znaky (metaznaky) mají v regulárním výrazu zvláštní význam, jak je možné takový znak zapsat tak, aby nebyl chápán jako metaznak, ale jako obyčejný znak (třeba plus či hvězdička). Řešení je prosté – stačí před inkriminovaný znak dopnit v regulárním výrazu zpětné lomítko \. Pokud chcete například pomocí regulárního výrazu popsat rovnici (a+b)*c=d, je třeba použít regulární výraz (a\+b)\*c=d.

Které znaky je třeba dopnit oním zpětným lomítkem (tzv. escapovat)? Mezi metaznaky patří \, ^, $, ., [, ], |, (, ), ?, *, +, {, }.

Příklady

Použití všech zmíněných metaznaků nejlépe pochopíte na několika příkladech.

Regulární výrazOdpovídá...
a+ sekvence písmen a (1 a více znaků)
a* sekvence písmen a (0 a více znaků)
o?kov okov či kov
tel(efon)? tel či telefon
telef(on|ax) telefon či telefax
[0-9]|[1-9][0-9] čísla 0 až 99
\d{2} sekvence dvou číslic desítkové soustavy (00, 01, ...,98, 99)
[0-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]+ hexadecimální čísla
(19|20)\d{2} letopočty 1900-2099
\d{2,6} sekvence dvou až šesti číslic
[^ ,.]+ neprázdná sekvence znaků mezi nimiž nesmí být mezera ( ), čárka (,) či tečka (.)
^P.* řetězec, který začíná písmenem P za nímž následuje libovolný (i nulový) počet libovolných znaků
\d+0$ řetězec, který končí znakem 0 (nula), kterému předchází minimálně jedna číslice
a+b ab, aab, aaab atd.
a\+b a+b

Poznámky závěrem

Otázky & odpovědi

Není vám přecijen něco úplně jasné? Chcete se zeptat? Neváhejte a využijte k tomu určené diskuzní fórum.

Doporučit stránku  |  Mapa webu  |  Inteligentní plastelína  |  Převody jednotek  |  Kalkulačka  |  Kalendář  |  Potisk triček
  WEBTAN - web traffic analyzer    XHTML 1.0 valid  RSS 2.0 - Novinky ze světa RV