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:

  1. a je regulární výraz pro libovolný literál (znak abecedy, popř. prázdný symbol ε) a, popisující právě text a.
  2. 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.
  3. 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.
  4. 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.
  5. 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 od x*) 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

Projekt Wikiknihy nabízí knihu na téma: