Regexový ťahák
Regulárne výrazy sú dosť kompaktné na to, aby sa syntax ľahšie vyhľadala než zapamätala. Táto stránka je celá na jednej obrazovke — triedy, kvantifikátory, kotvy, skupiny, lookaround, escapovanie a príznaky — s funkčným príkladom pre každý riadok.
Variant je JavaScript, ktorý beží vo vašom prehliadači a ktorý používa aj regexový tester na tejto stránke. Väčšina je identická v Pythone, Jave, Go a PCRE; kde sa varianty líšia, líšia sa na okrajoch — podpora lookbehind, syntax pomenovaných skupín a to, či \d znamená „ASCII číslica“ alebo „ľubovoľná Unicode číslica“.
Za väčšinu prekvapení môžu dve veci. Kvantifikátory sú hltavé: berú všetko, čo môžu, a vracajú späť len vtedy, keď zvyšok vzoru zlyhá, a preto <.+> zhltne dve značky a <.+?> nie. A alternácia viaže najvoľnejšie zo všetkého, takže ^a|b$ znamená „začína na a, alebo končí na b“ — nie to, čo väčšina ľudí zamýšľa, keď to píše.
Znakové triedy
11Skrátené zápisy sú iba ASCII, pokiaľ nepridáte príznak u a nepoužijete escapovanie Unicode vlastností.
| Syntax | Význam | Príklad |
|---|---|---|
| . | Ľubovoľný znak okrem zalomenia riadkaPridajte príznak s, aby sa zhodoval aj so znakmi nového riadka. | /a.c/"abc" → "abc" |
| \d | Číslica, 0–9 | /\d+/"order 42" → "42" |
| \D | Čokoľvek, čo nie je číslica | /\D+/"42abc" → "abc" |
| \w | Písmeno, číslica alebo podčiarkovníkIba ASCII — „é“ nie je \w. | /\w+/"user_1!" → "user_1" |
| \W | Čokoľvek, s čím sa \w nezhoduje | /\W+/"a++b" → "++" |
| \s | Ľubovoľný biely znak vrátane tabulátorov a znakov nového riadka | /\s+/"a \t b" → " \t " |
| \S | Ľubovoľný znak, ktorý nie je biely | /\S+/" hi" → "hi" |
| [abc] | Ktorýkoľvek z uvedených znakov | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Ľubovoľný znak okrem uvedených | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Rozsah znakov | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Ľubovoľné Unicode písmeno (vyžaduje príznak u) | /\p{L}+/"42 café" → "café" |
Kvantifikátory
7Všetky sú predvolene hltavé: berú čo najviac a vracajú späť len vtedy, ak zvyšok vzoru zlyhá.
| Syntax | Význam | Príklad |
|---|---|---|
| * | Nula alebo viac | /ab*/"a" → "a" |
| + | Jeden alebo viac | /ab+/"abbb" → "abbb" |
| ? | Nula alebo jeden — robí to voliteľným | /colou?r/"color" → "color" |
| {3} | Presne tri | /\d{3}/"id 12345" → "123" |
| {2,} | Dva alebo viac | /a{2,}/"aaa" → "aaa" |
| {2,4} | Medzi dvoma a štyrmi | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Lenivý — berie čo najmenejHltavý <.+> by zhltol obe značky. | /<.+?>/"<a><b>" → "<a>" |
Kotvy a hranice
4Zhodujú sa s pozíciou, nie so znakom, takže nič nekonzumujú.
| Syntax | Význam | Príklad |
|---|---|---|
| ^ | Začiatok reťazca, alebo riadka s príznakom m | /^a/"abc" → "a" |
| $ | Koniec reťazca, alebo riadka s príznakom m | /c$/"abc" → "c" |
| \b | Hranica slovaPráve toto zabráni, aby sa „cat“ zhodovalo vnútri „concatenate“. | /\bcat\b/"the cat sat" → "cat" |
| \B | Nie je hranica slova | /\Bcat/"concatenate" → "cat" |
Skupiny a alternácia
5| Syntax | Význam | Príklad |
|---|---|---|
| (abc) | Zachytávajúca skupina — zapamätaná pre nahradenie | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Zoskupenie bez zachytávaniaPoužite to, keď potrebujete iba zoskupenie; zachová zmysluplnosť čísel zachytávaní. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Pomenovaná zachytávajúca skupina | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Ktorákoľvek strana — alternáciaAlternácia má najnižšiu prioritu: ^a|b$ je „^a“ alebo „b$“, nie „^(a|b)$“. | /cat|dog/"one dog" → "dog" |
| \1 | Spätný odkaz na prvú skupinu | /(\w)\1/"letter" → "tt" |
Lookaround
4Tvrdenia o tom, čo obklopuje pozíciu. Samy sa s ničím nezhodujú, čo ich robí bezpečnými na kombinovanie.
| Syntax | Význam | Príklad |
|---|---|---|
| (?=…) | Lookahead — nasledované týmto | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Negatívny lookahead — nenasledované týmto | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — predchádzané týmto | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Negatívny lookbehind — nepredchádzané týmto | /(?<!\$)\b\d+/"about 40" → "40" |
Escapovanie
5Týchto dvanásť znakov potrebuje spätnú lomku, aby sa brali doslovne.
| Syntax | Význam | Príklad |
|---|---|---|
| \. | Doslovná bodka | /\d\.\d/"v2.5" → "2.5" |
| \\ | Doslovná spätná lomka | /\\/"C:\\dir" → "\\" |
| \n | Znak nového riadka | /a\nb/"a\nb" → "a\nb" |
| \t | Tabulátor | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Znak podľa jeho kódového bodu | /\u00e9/"café" → "é" |
Príznaky
6| Príznak | Názov | Význam |
|---|---|---|
| g | Globálny | Nájde každú zhodu, nielen prvú. |
| i | Ignorovať veľkosť písmen | Zhoduje sa bez ohľadu na veľké alebo malé písmená. |
| m | Viacriadkový | Spôsobí, že ^ a $ sa zhodujú pri každom zalomení riadka, nie len na koncoch reťazca. |
| s | Dot all | Umožní, aby sa . zhodovala aj so zalomeniami riadka. |
| u | Unicode | Spracúva vzor ako kódové body a povolí escapovanie vlastností \p{…}. |
| y | Sticky | Zhoduje sa iba presne na pozícii lastIndex, nikdy nehľadá dopredu. |