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ýrazpopisuje 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ř.
\dpro libovolnou desítkovou číslici,\spro bílý znak apod.
[editovat] Příklady
Pe(t|p)apopisuje řetězce „Peta“ a „Pepa“.Ba*fpopisuje ř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

