bitlvl
SR

Regex podsetnik

Sintaksa zajednička svim glavnim engine-ima, sa razlikama u jednoj tabeli na kraju.

Staje na jednu uspravnu A4 / Letter stranicu; u prozoru za štampu izaberite „Sačuvaj kao PDF“ da biste zadržali kopiju.

Sidra i granice

^ $početak / kraj teksta (reda sa zastavicom m)
\A \z \Zpočetak / kraj teksta bez obzira na zastavice (nema u JS-u)
\b \Bgranica reči / nije granica

Znakovi

.bilo koji znak osim novog reda (bilo koji sa zastavicom s)
\d \w \scifra, znak reči, belina; \D \W \S negiraju
[abc] [a-z] [^abc]skup, opseg, negirani skup
[\]\\^-]unutar skupa samo ] \ ^ - traže eskejp
\t \n \r \xHH \uHHHHtab, novi red, CR, heks, Unicode
\p{L} \p{Lu} \p{N} \p{Script=Cyrillic}Unicode svojstva (zastavica u u JS-u)
[[:alpha:]] [[:digit:]]POSIX klase (grep, PCRE; ne JS)
\. \* \( \\eskejpovan metaznak = doslovan

Kvantifikatori

* + ?0+, 1+, 0 ili 1
{n} {n,} {n,m}tačno, najmanje, između
*? +? ?? {n,m}?lenji: što manje
*+ ++ ?+posesivni: bez backtracking-a (PCRE, Java)

Grupe

(abc)hvatanje, numerisano od 1
(?:abc)bez hvatanja
(?<name>abc)imenovana (Python: (?P<name>…))
\1 \k<name>povratna referenca (Python: (?P=name))
a|balternacija (najniži prioritet)
(?>abc)atomska grupa (PCRE, Java)
(?i)abc (?i:abc)inline zastavica, inline zastavica sa opsegom

Lookaround (nulte širine)

(?=x)iza sledi x
(?!x)iza ne sledi x
(?<=x)ispred je x
(?<!x)ispred nije x

Zastavice

gsva podudaranja (JS, PHP kroz funkciju)
iignoriši velika i mala slova
m^ $ se podudaraju na prelomima redova
s. podudara i novi red (DOTALL)
xignoriši beline i # komentare u šablonu (PCRE, Python; ne JS)
uUnicode (JS); potreban za \p{}
ysticky (JS)

Zamena

$1 $<name> $&JS, .NET: grupa, imenovana, celo podudaranje
\1 \g<name>Python re.sub
$1 \1 ${name}PCRE / PHP preg_replace; Go koristi $1 i ${name}
sed 's/(a)(b)/\2\1/'sed -E (osnovni sed traži \( \))

Uobičajeni šabloni

^\s*$prazan red
\s+$belina na kraju reda
\b(?:\d{1,3}\.){3}\d{1,3}\bIPv4 (labavo)
[\w.+-]+@[\w-]+(?:\.[\w-]+)+imejl (praktično)
https?://[^\s"'<>]+URL
\d{4}-\d{2}-\d{2}ISO datum
#(?:[0-9a-fA-F]{3}){1,2}\bheks boja
"(?:[^"\\]|\\.)*"string pod dvostrukim navodnicima sa eskejpovima
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$lozinka sa cifrom, malim, velikim slovom, 8+
(\w+)\s+\1ponovljena reč

Razlike između varijanti

JavaScriptnema \A \z, nema zastavice x, nema posesivnih/atomskih; lookbehind da; imenovane grupe (?<n>)
PCRE (PHP, nginx, HAProxy)sve; graničnici /…/ u PHP-u
Python re(?P<n>), bez posesivnih pre 3.11, \Z = kraj
Go RE2, Rust regexlinearno vreme; bez lookaround-a, bez povratnih referenci
grep -E / sed -EERE: nema \d (koristite [0-9]), POSIX klase, nema lenjih kvantifikatora
grep (osnovni)\( \) \{ \} \+ \? eskejpovani da bi bili specijalni
Javaposesivni, atomski; stringovi traže dvostruke obrnute kose crte

Rezultati i poruke ovog alata prikazuju se na engleskom.

Pitanja

Gde mogu da testiram šablon?

Regex tester ističe podudaranja uživo, izlistava grupe, prikazuje pregled zamene i objašnjava šablon token po token.