Základní syntaxe, příklady
jsou mocná zbraň. Pokud se ji naučíte dobře používat, vyřeší za Vás nemálo problémů. Navíc Vám mlže pomoci udělat Vaše programy (či stránky) jak příjemnější pro uživatele, tak bezpečnější pro Váš server. Základem zvládnutí každého takového výrazu je nutnost znát syntaxi, takže se na ni podíváme krapet blíže a ukážeme si nejdůležitější výrazy:Výraz | Poznámka |
---|---|
Znaky | Nejpoužívanější znaky |
x | znak x |
\\ | zpětné lomítko |
\0n | znak v osmičkovém kódu |
\xhh | znak v hexadecimálním kódu |
\uhhhh | znak UNICODE v hexadecimálním kódu |
\t | tabulátor |
\n | nový řádek |
\r | návrat ukazatele |
[abc] | výčet znaků: a, b, c |
[^abc] | opak znaků = všechno kromě a, b, nebo c |
[a-zA-Z] | a až z nebo A až Z, včetně |
[a-z&&[^bc]] | a až z, kromě b ac: [ad-z](rozdíl) |
[a-z&&[def]] | d, e, nebo f (průnik) |
. | libovolný jeden znak (pokud chcete znak . musí být s lomítkem /.) |
\d | číslice: [0-9] |
\D | opak číslic: [^0-9] |
\s | bílý znak: [ \t\n\x0B\f\r] |
\S | opak bílého znaku: [^\s] |
\w | slovo: [a-zA-Z_0-9] |
\W | opak slova: [^\w] |
Omezení | hranice |
^ | začátek řádku |
$ | konec řádku, nebo identifikátor |
\b | hranice slova |
\B | opak hranice slova |
Kvantifikátory | logické spojky, atp. |
^ | negace |
X? | žádný nebo jeden prvek |
X* | žádný nebo více prvků |
X+ | jeden nebo více prvků |
X{n} | přesně n krát |
X{n,} | minimálně n krát |
X{n,m} | minimálně n krát ale maxilmálně m krát |
Logické spojky | logické oprace |
XY | Y ihned za X |
X|Y | X nebo Y |
(X) | závorky :) mají také ale specifický význam ve spojení se zapamatováním a voláním pomocí $x, nebo %x |
Tyto výrazy jsou víceméně základní, takže si ukážeme pár příkladů:
Třída znaků, někdy taky množina znaků
Díky jejich použití můžete říct překladači jak má z daným textem zacházet. To se samozřejmě nejčastěji využívá v podmínkách,
kdy hledáte nějakou část textu podle vzoru.
domena\.cz
- řetězec "domena.cz", přičemž si dejte pozor na speciální znak tečka. Dost často narazíte na webu na příklady s
regulárními výrazy, kde je tečka zapsaná bez lomítka, takže jako zástupný znak pro libovolný znak. V drtivé většině, pokud ji
použijete při zápisu domény, to zřejmě vadit nebude, ale je to chyba a pokud takovýto regulární výraz použijete jinde, můžete
se divit.
Další velice jednoduchý příklad je s nějakou volbou znaku pomocí jeho výčtu. Tak například gr[ae]y
znamená gray, nebo grey (rozdíl např. v anglické a britské angličtině). Je třeba si ovšem dát pozor, že se výčet
vztahuje konkrétně k jednomu znaku, takže gr[ae]y
neodpovídá graay, ani graey. Tento princip samozřejmě funguje i s čísly.
Další jednoduchý příklad je
[A-Za-z_][A-Za-z_0-9]*
který říká, že chceme slovo složené ze znaků anglické abecedy, čísel a tzv. podtržítka.
Jak se v tomto případě chová negace? Celkem srozumitelně text[^u]
neznamená "text" nenásledovaný znakem "u", ale "text" následovaný symbolem, kromě "u". Pokud budete chtít přece jen
hledat "text" nenásledovaný znakem "u" musíte použít konstrukci s negací výskytu, tj. text(?!u)
Poměrně jednoduché použití je taky pro otazník:
Po(ndeli)?
Tento zápis neříká nic jiného, než že chcete slovo "Po", nebo "Pondeli"
Tečka, mocný to symbol.
Tečka Vám umožní být pohodlným. Když například hledáte datum ve formátu mm/dd/yy a nevíte, jaký bude použit symbol oddělující
jednotlivé položky, je nejlepší použít tečku jako zástupný symbol
\d\d[- /.]\d\d[- /.]\d\d
Tímto dosáhnete hezkého (např. 99/99/99), nicméně ne perfektního výsledku. Pokud máte alespoň základní tušení o tvaru
datumu, můžete například použít toto:
[0-1]\d[- /.][0-3]\d[- /.]\d\d
Kdy si říkáte o datum kdy první je měsíc (první znak 0-1) následovaný již známou částí. Tato ukázka opět dokazuje, že
je třeba si dát pozor na to lomítko u tečky, bez něj by Vám prošla pouze čísla oddělená tečkou.
Logické operátory jsou poměrně snadné. Pokud například chcete najít dvě slova a je Vám jedno, které z nich to bude, můžete
použít |. Tento operátor má nejnižší prioritu, takže za všech okolností říká, buď to všechno co je vlevo, nebo vpravo. Pokud
chcete přece jen omezit jeho platnost, použijte závorky.
\b(vlevo|vpravo)\b
Tohle říká, chci slovo vlevo, nebo vpravo.
Jak jste si určitě všimli, tak bylo použito oddělení slova pomocí
symbolu "\b". Velice často se také používá \s ve spojení s některým operátorem pro množství, např. "\s+" vám řekne, že tam
kde dáte tento zápis může text obsahovat jeden, nebo více bílých znaků. To se mlže hodit například při parsování textu.
Autor: mimi