Podsetnik
| Token | Podudara se sa |
|---|---|
| . | Bilo koji znak osim novog reda (sa zastavicom s: bilo koji znak) |
| \d \w \s | Cifra; znak reči [A-Za-z0-9_]; belina. Veliko slovo negira: \D \W \S |
| [abc] [^abc] [a-z] | Klasa znakova, negirana klasa, opseg |
| ^ $ | Početak i kraj unosa (svakog reda sa zastavicom m) |
| \b | Granica reči |
| * + ? {n} {n,} {n,m} | 0 ili više, 1 ili više, 0 ili 1, tačno n, n ili više, od n do m |
| *? +? ?? | Lenje (najkraće) verzije |
| (abc) | Grupa za hvatanje, numerisana od 1 |
| (?<ime>abc) | Imenovana grupa, referencira se kao \k<ime> i $<ime> |
| (?:abc) | Grupa bez hvatanja |
| a|b | Alternacija |
| (?=x) (?!x) (?<=x) (?<!x) | Lookahead, negativni lookahead, lookbehind, negativni lookbehind |
| \1 | Povratna referenca na grupu 1 |
| \p{L} \p{Script=Cyrillic} | Unicode svojstvo (zahteva zastavicu u) |
Zastavice
g pronalazi sva podudaranja, ne samo prvo; i ignoriše velika i mala slova; m čini da se ^ i $ podudaraju na prelomima redova; s dozvoljava da se . podudara sa novim redom; u Unicode režim (potreban za \p{…} i za ispravnu obradu emodžija); y sticky, podudara se samo na lastIndex.
Varijante
Ovaj tester koristi JavaScript engine. Gornja sintaksa je zajednička sa PCRE (PHP, nginx, HAProxy), Python-ovim re i Javom za gotovo sve što ćete napisati; razlike su na ivicama: Python imenuje grupe kao (?P<ime>…), Go-ov RE2 i grep -E nemaju lookbehind ni povratne reference, a POSIX klase poput [[:digit:]] nisu JavaScript. Atomske grupe i posesivni kvantifikatori postoje samo u PCRE i Javi.
Uobičajeni šabloni
Pitanja
Zašto se moj šablon podudara samo jednom?
Bez zastavice g regex pronalazi samo prvo podudaranje. Dodajte g da pronađe sva. U kodu koristite matchAll, re.findall ili preg_match_all za isti efekat.
Zašto .* hvata previše?
Kvantifikatori su pohlepni: .* uzima što više može i povlači se samo ako ostatak ne uspe. Koristite .*? za najkraće podudaranje, ili negiranu klasu poput [^"]* koja je i brža i jasnija.
Kako da se podudarim sa doslovnom tačkom ili zagradom?
Eskejpujte je obrnutom kosom crtom: \. \[ \( \\. Alat za escape stringova ima regex režim koji eskejpuje ceo literal umesto vas.
Šta je katastrofalni backtracking?
Ugnežđeni kvantifikatori poput (a+)+ nad unosom koji se ne podudara teraju engine da isproba eksponencijalno mnogo puteva i zaglave ga. Izbegavajte ugnežđavanje kvantifikatora nad preklapajućim skupovima, koristite posesivne ili atomske grupe tamo gde ih engine ima, ili koristite RE2 (Go, Rust regex), koji garantuje linearno vreme.