Invia.cz
Last minute
Tunisko
Dovolená v Chorvatsku
Pojeďte do Egypta
Bulharsko
Vydělávejte peníze s INVIA.CZ
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í v počítačových programech a skriptovacích jazycích pro vyhledávání a úpravu textu. V případě, že uživatel chce v textu vyhledat nějaký řetězec, který nezná přesně nebo který může mít více variant, může zadat regulární výraz, který postihne všechny chtěné varianty. Program tak nalezne všechny části textu, které danému výrazu odpovídají.
Regulární výraz se skládá z literálů textu, které se mají shodovat, a speciálních znaků, které nejsou součástí hledaného textu, sloužících pro popis alternativ, množin, počtů výskytů a přepínačů.
Obsah |
Formálně je regulární výraz definován následujícím způsobem:
Tato definice dostačuje pro popis libovolného regulárního jazyka.
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ší). V běžných syntaxích se zpravidla objevují následující konstrukce:
| (svislítko neboli pajpa).[a-z0-9] znamená libovolný znak v rozsahu a–z, 0–9.[^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).. (tečka) znamená libovolný znak.^nějakývýraz popisuje pouze takové řetězce nějakývýraz, které se nachází na začátku řetězce.nějakývýraz$ popisuje pouze takové řetězce nějakývýraz, které se nachází na konci řetězce.xy? popisuje znak x, který může, ale nemusí, být následován znakem y.x+ vyžaduje (na rozdíl od x*) alespoň jeden výskyt znaku x.x{3,5} popisuje troj- až pěti-násobné opakování znaku x.\d pro libovolnou desítkovou číslici, \s pro bílý znak apod.Mezi nejznámější používané syntaxe zápisu regulárních výrazů patří POSIX Regular Expressions a Perl Compatible Regular Expressions (PCRE), odvozená z definice jazyka Perl. Syntaxe PCRE (případně s malými odlišnostmi) se používá mimo jiné v PHP (funkce preg_), Pythonu či JavaScriptu.
V mnoha dnešních nástrojích obsahuje syntaxe „regulárních výrazů“ prostředky, kterými lze popsat jazyky silnější než regulární. Např. prostřednictvím tzv. zpětných odkazů v PCRE lze zapsat výraz (.*)\1, který označuje dvojí opakování libovolného textu (např. „masomaso“ či „123123“). Jazyk všech takových opakování však není regulární, není dokonce ani bezkontextový; běžné nástroje tak umožňují zapsat NP-těžké jazyky (a vyhledávat podle nich).
To vede k jistému zmatení pojmů, neboť „regulární výraz“ v běžném použití označuje obecnější pojem než „regulární výraz“ ve smyslu teorie formálních jazyků. Pro jednoznačnost se někdy tyto „rozšířené regulární výrazy“ označují jinak, např. výhradně výrazem „regex“.[1][2]
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.