Regulární výrazy (nebo také regexy) jsou speciální řetězce znaků, které slouží k popisu a vyhledávání textových řetězců podle určitých vzorců. Tyto vzorce umožňují definovat složitá pravidla pro vyhledávání, nahrazování, rozdělování a zpracování textových řetězců.
Regulární výrazy se používají v různých programovacích jazycích, textových editorech, databázových systémech a dalších aplikacích pro práci s textovými daty. Mezi nejznámější programovací jazyky, které podporují regulární výrazy, patří například Java, Python, Perl, JavaScript, Ruby a další.
Regulární výrazy obsahují speciální znaky a metaznaky, které slouží k definici různých vzorců a pravidel. Například znak „.“ reprezentuje jakýkoli znak, znak „^“ označuje začátek řádku, znak „$“ označuje konec řádku, znak „+“ znamená jeden nebo více opakování předchozího znaku nebo výrazu atd.
S použitím regulárních výrazů lze vyhledávat řetězce podle určitých podmínek, například hledat všechny řetězce, které obsahují určitý výraz, nebo hledat řetězce, které začínají nebo končí určitým slovem. Regulární výrazy jsou také užitečné pro extrakci a transformaci dat, jako je například konverze dat do jiného formátu.
Znak | Popis | Příklady |
---|---|---|
. | odpovídá libovolnému znaku | l.s odpovídá les, los, l5s aj. |
\ | vrací metaznaku původní význam | a\+b odpovídá a+b |
? | minimálně 0x, maximálně 1x | ku?s odpovídá právě ks a kus |
* | minimálně 0x, maximálně neomezeně krát | halo* odpovídá hal, halo, haloooo apod. |
+ | minimálně 1x, maximálně neomezeně krát | halo+ odpovídá halo, haloooo apod. |
{n} | právě n-krát | 10{6} odpovídá právě 1000000 |
{m,n} | minimálně m-krát, maximálně n-krát | 10{2,4} odpovídá právě 100, 1000 a 10000 |
{n,} | minimálně n-krát | 10{2,} odpovídá 100, 1000, 10000, 10000 apod. |
[ ] | odpovídá jednomu ze znaků v závorkách | [abc] odpovídá právě a, b, c |
[^ ] | odpovídá jednomu znaku, neuvedenému v závorkách | [^abc] odpovídá libovolný znak krom a, b, c |
[ – ] | odpovídá jednomu znaku z rozsahu znaků | [a-z] odpovídají (malá) písmena abecedy |
\s | odpovídá bílému znaku (\n, \r, \t, mezera aj.) | a\sb odpovídá a b, ale ne ab |
\S | odpovídá jinému než bílému znaku | a\Sb odpovídá a+b, ale ne a b |
\d | odpovídá desítkové číslici | a\db odpovídá a2b, ale ne axb |
\D | odpovídá libovolnému znaku kromě číslic 0-9 | a\Db odpovídá axb, ale ne a2b |
\w | odpovídá alfanumerickému znaku a podtržitku | \w odpovídá 1, a, A, _ ap., ale ne $, + ap. |
\W | odpovídá nealfanumerickému znaku nebo podtržítku | \W odpovídá $, !, ?, % ap., ale ne 2, b ap. |
^ | na začátku řetězce či řádku | ^Petr najde Petr jen na začátku řetězce/řádku |
$ | na konci řetězce či řádku | Pavel$ najde Pavel jen na konci řetězce/řádku |
\b | na začátku či konce tzv. slova | \bkos\b nenajde kos ve slově kost či kokos |
\B | kdekoliv kromě začátku a konce slova | \Bkos najde kos ve slově kokos, ale ne v kost |
| | odděluje několik dílčích výrazů | ahoj|nazdar odpovídá právě jednomu z pozdravů a(b|c) odpovídá právě ab a ac |
( ) | subřetězec na nějž je možno aplikovat kvantifikátor | ko(ko)?s odpovídá právě kos a kokos (\d)\1 resp. (\d)$1 odpovídá 11, 22, 33 apod. |
(?: ) | uzávorkování netvořící zpětnou referenci | (?:\d)(\d)\1 bude odpovídat 122, 133, 455 apod. |
(?# ) | komentář – text v závorkách za znakem # je ignorován | a(?#test)b odpovídá právě ab |
(?= ) | kladné tvrzení o následujícím | kos(?=t) odpovídá kos v kost, ale ne v kosa |
(?! ) | záporné tvrzení o následujícím | kos(?!t) odpovídá kos v kosa, kosu ale ne v kost |
(?<= ) | kladné tvrzení o předcházejícím | \d{3}(?<=0) sekvence 3 číslic; poslední musí být 0 |
(?<! ) | záporné tvrzení o předcházejím | \d{3}(?<!0) sekvence 3 číslic; poslední nesmí být 0 |