article

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í.

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.

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).
  • Jeden z uvedených znaků: zápis * znamená libovolný znak v rozsahu a–z, 0–9.
  • Jeden z neuvedených znaků: zápis * 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.

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).
  • *+(, ?*+)* popisuje seznam hexadecimálních čísel, oddělených čárkami a nepovinnými mezerami.

Externí odkaz


Informatika

Regulære udtryk | Regulärer Ausdruck | Regular expression | Expresión regular | Säännöllinen lauseke | Expression régulière | Regluleg segð | 正規表現 | Wyrażenia regularne | Expressão regular | Регулярное выражение

 

This article is licensed under the GNU Free Documentation License. It uses material from the "Regulární výraz".

Home Pageartsbusinesscomputersgameshealthhospitalshomekids & teensnewsphysiciansrecreationreferenceregionalscienceshoppingsocietysportsworld