Pokud vám pojem regulární výrazy skutečně mnoho neříká, může vám jako
první přiblížení pomoci srovnání se zástupnými znaky *
a ?
,
které můžete znát z některých aplikací a služeb. Pro definování podmínek či vyhledávání je můžete využít například v Google Analytics, Google Tag Manageru, Google Adwords, ale i textových editorech či třeba Adobe Indesignu.
Alespoň základní znalost regulárních výrazů také patří k základním znalostem programátorů, protože může usnadnit mnohé situace a hodí se při hromadných transformacích textu.
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ů:
.
(tečka) – ta zastupuje právě jeden libovolný znak.[
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 [
ještě 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]
(
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.Petr
nebo Pavel
), jako oddělovač variant použijeme metaznak |
(výraz bude tedy Petr|Pavel
)Následující tabulky zobrazují seznam kvantifikátorů a hranic.
Kvantifikátor | Poč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.
\d |
číslice 0-9 |
\D |
jakýkoliv znak kromě číslic 0-9 |
\w |
znaky „slova” (ekvivalentní zápisu [a-zA-Z0-9_] ) |
\W |
jakýkoliv znak kromě znaků „slova” (ekvivalentní zápisu [^a-zA-Z0-9_] ) |
\s |
„bílé” znaky (mezera, tabulátor, znaky pro zalomení řádků) |
\S |
jakýkoliv znak kromě „bílých” znaků |
^ |
začátek řetězce (textu v němž se vyhledává) |
$ |
konec řetězce (textu v němž se vyhledává) |
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 doplnit 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 doplnit oním zpětným lomítkem (tzv. escapovat)? Mezi metaznaky patří \
, ^
, $
, .
, [
, ]
, |
, (
, )
, ?
, *
, +
, {
, }
.
Použití všech zmíněných metaznaků nejlépe pochopíte na několika příkladech.
Regulární výraz | Odpoví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 |
Článek je převzat z webu www.regularnivyrazy.info.
Jak se zbavit (not set) v Session Source a Session Medium?
Chcete doměřit efekt vaší offline reklamy, ze které vedete lidi na váš web? Jde to…
Tenhle článek jsem měl rozepsaný fakt dlouho, ale je stále aktuální… Trápí mě, že opakovaně…
Poslední dobou jsem se setkal s pár majiteli malých firem, kteří mají web a snaží…
Občas se mě někdo ptá, co používám pro tvorbu screencastů a online videí. Které nástroje…
V rámci 5 videí najdete 7 krátkých video tipů pro zefektivnění práce s Google Analytics…