Stránka 1 z 1

Regulární výrazy - příklady

Napsal: úte 08. zář 2015 23:30:10
od RoliD
Příklady regulárních výrazů
Pojem regulární výrazy je  pro mnoho lidí docela strašák a sám o sobě moc neříká. Trošku to popíšu a doufám že jednoduše. Začnu zástupnými znaky * a ?, které můžete známe z mnoha jiných systémů a aplikací. (třeba z příkazové řádky "cmd" windows) . Regulární výrazy disponují mnohem více speciálními znaky než * a ?. Speciální znaky se v regulárních výrazech nazývají metaznaky.
V regulárních výrazech existuje několik typů metaznaků.
  • Základním metaznakem je . (tečka) – ta zastupuje právě jeden libovolný znak.
  •  Významnou skupinou metaznaků jsou kvantifikátory (quantifiers) - ty určují kolikrát se smí opakovat znak předcházející kvantifikátoru.
  • Pokud chceme v určitém místě povolit právě jeden ze skupiny znaků, uzavřeme takovou skupinu znaků do hranatých závorek ([ a ]). Pokud chceme naopak definovat, že v daném místě smí být libovolný znak s výjimkou několika určitých znaků, uzavřeme „zakázané” znaky opět do hranatých závorek a za [ jestě doplníme ^. Zápis [^ab], tak bude znamenat, že se v daném místě má vyskytovat jeden libovolný znak kromě znaků a a b.
    Pro často používané skupiny znaků existují speciální zkratky (například zápis \d zastupuje všechny číslice 0-9) – viz tabulku níže.
    Pokud chceme definovat skupinu znaků, které následují v abecedě (resp. přesněji v tabulce znaků) za sebou, můžeme je zapsat jako interval, například [1-5], [a-e] nebo třeba [A-Z]
  • Pokud potřebujeme zajistit, opakování určité sekvence znaků (ne jen znaku jednoho), můžeme sekvenci znaků uzavřít do závorek (( a )) a pokud za pravou kulatou závorku doplníme kvantifikátor, bude se počet opakování vztahovat na celou sekvenci znaků uzavřenou do závorek.
  • Pokud chceme dát na výběr několik variant textu (třeba Petr nebo Pavel), jako oddělovač variant použijeme metaznak | (výraz bude tedy Petr|Pavel)
  • Pokud chceme přikázat, že hledaný textový řetězec se musí nacházet na začátku nebo konci prohledávaného textu, použijeme metaznaky, které nazýváme hranice (boundaries) nebo ukotvení (anchors) – na různé typy hranic se podíváme níže.



Regulární výraz Co to znamená
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
^[^,]+$ řádek který neobsahuje čárku ,
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$ kontrola emailové adresy
[a-zA-Z_.]+@[a-zA-Z_.]+ jednodušší kontrola emailu, které stačí, že je něco před zavináčem a pak po něm
http://[a-zA-Z_.]+ najde všechny url adresy v textu
(http://)?w{3}[a-zA-Z_.]+\.cz najde všechny .cz domény v textu.. s http či bez
\d+\.\d+\.\d+\­.\d+ najde všechny IP adresy v textu
Znaky
x znak x
\\ zpětné lomítko
\0n znak v osmičkovém kódu 0n (0 <= n <= 7)
\xhh znak v hexadecimálním kódu 0×hh
\uhhhh znak UNICODE v hexadecimálním kódu 0×hhhh
\t znak tabulátor (‚\u0009‘)
\n znak nového řádku (‚\u000A‘)
\r znak posunu vozíku (‚\u000D‘)
Skupiny znaků
[abc] výčet znaků: a, b, nebo c
[^abc] jakýkoli znak kromě: a, b, nebo c(negace)
[a-zA-Z] a až z nebo A až Z, včetně (rozsah)
[a-d[m-p]] a až d, nebo m až p: [a-dm-p](sjednocení)
[a-z&&[def]] d, e, nebo f (průnik)
[a-z&&[^bc]] a až z, kromě b ac: [ad-z](rozdíl)
Předdefinované skupiny znaků
\d číslice: [0–9]
\D opak číslice (negace): [^0–9]
\s bílý znak: [ \t\n\x0B\f\r]
\S opak bílého znaku: [^\s]
\w slovo: [a-zA-Z0-9]
\W opak slova: [^\w]
Hranice
^ začátek řádku
$ konec řádku
\b hranice slova
\B opak hranice slova (negace)
Kvantifikátory
X? X, žádný nebo jeden
X* X, žádný nebo více
X+ X, jeden nebo více
X{n} X, přesně nkrát
X{n,} X, minimálně nkrát
X{n,m} X, minimálně nkrát, ale ne více než mkrát
Logické spojky
XY X ihned zaY
X|Y X neboY
(X) párování logických spojek
slouží také k zapamatování při nahrazování pomocí \1 až \\n/p>
<span(.*?)> Najde všechny varianty tagu