Domande
Dove posso provare un pattern?
Il tester di regex evidenzia le corrispondenze in tempo reale, elenca i gruppi, mostra un’anteprima della sostituzione e spiega il pattern token per token.
La sintassi condivisa da ogni motore principale, con le differenze in una tabella alla fine.
| ^ $ | inizio / fine del testo (della riga con il flag m) |
| \A \z \Z | inizio / fine del testo a prescindere dai flag (non in JS) |
| \b \B | confine di parola / non confine |
| . | qualsiasi carattere tranne l’a capo (qualsiasi con il flag s) |
| \d \w \s | cifra, carattere di parola, spazio bianco; \D \W \S negano |
| [abc] [a-z] [^abc] | insieme, intervallo, insieme negato |
| [\]\\^-] | dentro un insieme solo ] \ ^ - richiedono l’escape |
| \t \n \r \xHH \uHHHH | tab, a capo, CR, hex, Unicode |
| \p{L} \p{Lu} \p{N} \p{Script=Cyrillic} | proprietà Unicode (flag u in JS) |
| [[:alpha:]] [[:digit:]] | classi POSIX (grep, PCRE; non JS) |
| \. \* \( \\ | metacarattere con escape = letterale |
| * + ? | 0+, 1+, 0 o 1 |
| {n} {n,} {n,m} | esattamente, almeno, tra |
| *? +? ?? {n,m}? | pigri: il meno possibile |
| *+ ++ ?+ | possessivi: nessun backtracking (PCRE, Java) |
| (abc) | cattura, numerata da 1 |
| (?:abc) | senza cattura |
| (?<nome>abc) | con nome (Python: (?P<nome>…)) |
| \1 \k<nome> | riferimento all’indietro (Python: (?P=nome)) |
| a|b | alternativa (precedenza più bassa) |
| (?>abc) | gruppo atomico (PCRE, Java) |
| (?i)abc (?i:abc) | flag inline, flag inline con ambito |
| (?=x) | seguito da x |
| (?!x) | non seguito da x |
| (?<=x) | preceduto da x |
| (?<!x) | non preceduto da x |
| g | tutte le corrispondenze (JS, PHP tramite funzione) |
| i | ignora maiuscole/minuscole |
| m | ^ $ corrispondono agli a capo |
| s | . corrisponde all’a capo (DOTALL) |
| x | ignora spazi e commenti # nel pattern (PCRE, Python; non JS) |
| u | Unicode (JS); necessario per \p{} |
| y | sticky (JS) |
| $1 $<nome> $& | JS, .NET: gruppo, con nome, intera corrispondenza |
| \1 \g<nome> | Python re.sub |
| $1 \1 ${nome} | PCRE / PHP preg_replace; Go usa $1 e ${nome} |
| sed 's/(a)(b)/\2\1/' | sed -E (il sed di base richiede \( \)) |
| ^\s*$ | riga vuota |
| \s+$ | spazi finali |
| \b(?:\d{1,3}\.){3}\d{1,3}\b | IPv4 (approssimativo) |
| [\w.+-]+@[\w-]+(?:\.[\w-]+)+ | email (pratico) |
| https?://[^\s"'<>]+ | URL |
| \d{4}-\d{2}-\d{2} | data ISO |
| #(?:[0-9a-fA-F]{3}){1,2}\b | colore hex |
| "(?:[^"\\]|\\.)*" | stringa tra doppi apici con escape |
| ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$ | password con cifra, minuscola, maiuscola, 8+ |
| (\w+)\s+\1 | parola ripetuta |
| JavaScript | niente \A \z, niente flag x, niente possessivi/atomici; lookbehind sì; gruppi con nome (?<n>) |
| PCRE (PHP, nginx, HAProxy) | tutto; delimitatori /…/ in PHP |
| Python re | (?P<n>), niente possessivi prima della 3.11, \Z = fine |
| Go RE2, Rust regex | tempo lineare; niente lookaround, niente riferimenti all’indietro |
| grep -E / sed -E | ERE: niente \d (usa [0-9]), classi POSIX, niente quantificatori pigri |
| grep (di base) | \( \) \{ \} \+ \? con escape per essere speciali |
| Java | possessivi, atomici; le stringhe richiedono doppi backslash |
I risultati e i messaggi di questo strumento sono mostrati in inglese.
Il tester di regex evidenzia le corrispondenze in tempo reale, elenca i gruppi, mostra un’anteprima della sostituzione e spiega il pattern token per token.