Regulární výrazy

Napsal O webu (») 29. 3. 2006 v kategorii Programování, přečteno: 3705×

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ýrazPoznámka
ZnakyNejpoužívanější znaky
xznak x
\\zpětné lomítko
\0nznak v osmičkovém kódu
\xhhznak v hexadecimálním kódu
\uhhhhznak UNICODE v hexadecimálním kódu
\ttabulátor
\nnový řádek
\rná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]
\Dopak číslic: [^0-9]
\sbílý znak: [ \t\n\x0B\f\r]
\Sopak bílého znaku: [^\s]
\wslovo: [a-zA-Z_0-9]
\Wopak slova: [^\w]


Omezeníhranice
^začátek řádku
$konec řádku, nebo identifikátor
\bhranice slova
\Bopak hranice slova


Kvantifikátorylogické 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é spojkylogické oprace
XYY ihned za X
X|YX 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
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

CZhakis z IP 85.71.143.*** | 30.3.2006 16:08
Dají se vámi uvedené Regulerní výrazy použít v jazyce PHP?
banan.czMgr.Radovan Kaluža | 31.3.2006 14:31
samozřejmně že dajísmajl www.php.cz
Miroslav Pecka z IP 84.244.83.*** | 1.4.2006 23:47
Miroslav Pecka z IP 84.244.83.*** | 1.4.2006 23:43
Pokud chcete o regulárních výrazech a jejich použití v různých prostředích a pro různé úlohy vědět více, koukněte na http://www.regularnivyrazy.info/


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel deset a dvě