Regulární výraz
Z Wikipedie, otevřené encyklopedie
Regulární výraz (zkracováno na regexp, regex či jen RE podle anglického regular expression) je řetězec popisující celou množinu řetězců, konkrétně regulární jazyk.
Regulární výrazy se nejčastěji používají u počítačových programů pro vyhledávání v textu. V případě, že uživatel chce v textu vyhledat nějaký řetězec, který nezná přesně, může zadat regulární výraz, kterému má text vyhovovat. Program pak nalezne všechny části textu, které danému výrazu odpovídají.
Obsah |
[editovat] Formální definice
Formálně je regulární výraz definován následujícím způsobem:
- a je regulární výraz pro libovolný literál (znak abecedy, popř. prázdný symbol ε) a, popisující právě text a.
- Pokud A a B jsou regulární výrazy, je AB regulární výraz, popisující zřetězení textů popsaných výrazy A a B.
- Pokud A a B jsou regulární výrazy, je A + B regulární výraz, popisující buď text popsaný výrazem A, nebo text, popsaný výrazem B.
- Pokud A je regulární výraz, pak A* je regulární výraz, popisující libovolný počet opakování (včetně žádného opakování) textů popsaných výrazem A.
- Pokud A je regulární výraz, je (A) regulární výraz popisující stejný jazyk. (Závorky slouží pouze pro vyjasnění priorit.)
Tato definice dostačuje pro popis libovolného regulárního jazyka.
[editovat] Prakticky používané syntaxe
V praxi se používají obvykle rozšířené definice regulárních jazyků, které umožňují běžné konstrukce zapsat jednodušším způsobem (ale schopnosti takto rozšířených výrazů se od základní definice neliší). Nejčastěji se objevují následující konstrukce:
- Místo znaku + (plus) se pro alternativy obvykle používá
|
(svislítko neboli pajpa). - Jeden z uvedených znaků: zápis
[a-z0-9]
znamená libovolný znak v rozsahu a–z, 0–9. - Jeden z neuvedených znaků: zápis
[^a-z0-9]
znamená libovolný znak kromě znaků v rozsahu a–z, 0–9. Jindy se místo stříšky používá znak!
(vykřičník). - Libovolný znak: symbol
.
(tečka) znamená libovolný znak. - Pouze na začátku řetězce: zápis
^nějakývýraz
popisuje pouze takové řetězce nějakývýraz, které se nachází na začátku řetězce. - Pouze na konci řetězce: zápis
nějakývýraz$
popisuje pouze takové řetězce nějakývýraz, které se nachází na konci řetězce. - Nepovinná část: zápis
xy?
popisuje znak x, který může, ale nemusí, být následován znakem y. - Libovolný počet opakování, ale nejméně jednou: zápis
x+
vyžaduje (narozdíl odx*
) alespoň jeden výskyt znaku x. - Zadaný počet opakování: zápis
x{3,5}
popisuje troj- až pěti-násobné opakování znaku x. - Definované množiny znaků: některé speciální skupiny znaků mají zkratkový zápis, např.
\d
pro libovolnou desítkovou číslici,\s
pro bílý znak apod.
[editovat] Příklady
Pe(t|p)a
popisuje řetězce „Peta“ a „Pepa“.Ba*f
popisuje řetězce „Bf“, „Baf“, „Baaf“, „Baaaf“ atd.\d{3} \d{2}
popisuje formát PSČ – posloupnost tří číslic, mezeru a dvě číslice.<[^>]*>
popisuje tag v jazyce HTML – libovolný text uzavřený mezi špičaté závorky (poznámka: tento výraz je zjednodušený, ve skutečném HTML situaci komplikují řetězce v uvozovkách).[0-9a-fA-F]+(, ?[0-9a-fA-F]+)*
popisuje seznam hexadecimálních čísel, oddělených čárkami a nepovinnými mezerami.
[editovat] Externí odkaz
- Seriál Regulární výrazy na Root.cz
- Regulární výrazy - syntaxe, návody, řešení, tester RV, diskuze