Set-top-boxy
Parfémy
Krása
Produkty pro zdraví
Hodinky
Elektro
Šperky
Nábytek
Nářadí a zahrada
Outdoor
Počítače
Mobily
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. Představil je americký matematik Steven Kleene.[1]
Regulární výrazy mohou pro hledání podporovat i jiné programy, například propracovanější textové editory nebo souborové manažery. Nejčastěji jsou ale podporovány v počítačových programech a skriptovacích jazycích formou externí knihovny nebo sady funkcí.
Nejčastější využití je:
Pokud chce uživatel v textu vyhledat nějaký řetězec, který nezná přesně nebo který může mít více podob, může zadat regulární výraz, který postihne všechny požadované 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).(a1|a2)(b1|b2) zachycuje případy a1 nebo a2 následované b1 nebo b2)[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. Pozn.: podle konkrétního nastavení se nemusí vztahovat na nový řádek.^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. Sémanticky odpovídá „0 nebo 1 výskyt“.x* (0 až ∞ výskytů x)x+ vyžaduje 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.[[:<:]]Wikipedie[[:>:]] (pro MySQL) hledá výraz Wikipedie jako celé slovo (tj. oddělené mezerami, interpunkcí či jinými znaky, které nejsou součástí slova).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_ nebo (nyní již zastaralé) funkce ereg(i)_), 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“.[2][3]
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 posloupnost tří číslic, mezeru a dvě číslice – formát PSČ.<[^>]*> 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.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||