bitlvl
SR

Regex tester (regularni izrazi)

Ukucajte šablon i zastavice, nalepite tekst za pretragu. Podudaranja se osvetljavaju dok kucate, svaka grupa se izlistava, a šablon se objašnjava deo po deo.

//

Podudaranja

Zamena

 

Objašnjenje

Rezultati i poruke ovog alata prikazuju se na engleskom.

Podsetnik

TokenPodudara se sa
.Bilo koji znak osim novog reda (sa zastavicom s: bilo koji znak)
\d \w \sCifra; 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)
\bGranica 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|bAlternacija
(?=x) (?!x) (?<=x) (?<!x)Lookahead, negativni lookahead, lookbehind, negativni lookbehind
\1Povratna 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

IPv4 adresa (labavo)
\b(?:\d{1,3}\.){3}\d{1,3}\b
Imejl (praktično)
[\w.+-]+@[\w-]+(?:\.[\w-]+)+
ISO datum
(?<y>\d{4})-(?<m>0[1-9]|1[0-2])-(?<d>0[1-9]|[12]\d|3[01])
Heks boja
#(?:[0-9a-f]{3}){1,2}\b
Uklanjanje beline na kraju reda
[ \t]+$ (zastavice gm, zamenite praznim)

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.