bitlvl
IT

Tester di regex

Scrivi un pattern e i flag, incolla il testo in cui cercare. Le corrispondenze si illuminano mentre scrivi, ogni gruppo viene elencato e il pattern viene spiegato pezzo per pezzo.

//

Corrispondenze

Sostituzione

 

Spiegazione

I risultati e i messaggi di questo strumento sono mostrati in inglese.

Cheat sheet

TokenCorrisponde a
.Qualsiasi carattere tranne l’a capo (con il flag s: qualsiasi carattere)
\d \w \sCifra; carattere di parola [A-Za-z0-9_]; spazio bianco. La maiuscola nega: \D \W \S
[abc] [^abc] [a-z]Classe di caratteri, classe negata, intervallo
^ $Inizio e fine dell’input (di ogni riga con il flag m)
\bConfine di parola
* + ? {n} {n,} {n,m}0 o più, 1 o più, 0 o 1, esattamente n, n o più, da n a m
*? +? ??Versioni pigre (più corte)
(abc)Gruppo di cattura, numerato da 1
(?<nome>abc)Gruppo con nome, riferito come \k<nome> e $<nome>
(?:abc)Gruppo senza cattura
a|bAlternativa
(?=x) (?!x) (?<=x) (?<!x)Lookahead, lookahead negativo, lookbehind, lookbehind negativo
\1Riferimento all’indietro al gruppo 1
\p{L} \p{Script=Cyrillic}Proprietà Unicode (richiede il flag u)

Flag

g trova tutte le corrispondenze, non solo la prima; i ignora maiuscole/minuscole; m fa corrispondere ^ e $ agli a capo; s permette a . di corrispondere agli a capo; u modalità Unicode (necessaria per \p{…} e per la gestione corretta delle emoji); y sticky, corrisponde solo a lastIndex.

Varianti

Questo tester usa il motore JavaScript. La sintassi qui sopra è condivisa con PCRE (PHP, nginx, HAProxy), il modulo re di Python e Java per quasi tutto ciò che scriverai; le differenze sono ai margini: Python nomina i gruppi (?P<nome>…), RE2 di Go e grep -E non hanno lookbehind né riferimenti all’indietro, e le classi POSIX come [[:digit:]] non sono JavaScript. Gruppi atomici e quantificatori possessivi esistono solo in PCRE e Java.

Pattern comuni

Indirizzo IPv4 (approssimativo)
\b(?:\d{1,3}\.){3}\d{1,3}\b
Email (pratico)
[\w.+-]+@[\w-]+(?:\.[\w-]+)+
Data ISO
(?<y>\d{4})-(?<m>0[1-9]|1[0-2])-(?<d>0[1-9]|[12]\d|3[01])
Colore hex
#(?:[0-9a-f]{3}){1,2}\b
Togliere gli spazi finali
[ \t]+$ (flag gm, sostituisci con niente)

Domande

Perché il mio pattern corrisponde una sola volta?

Senza il flag g una regex trova solo la prima corrispondenza. Aggiungi g per trovarle tutte. Nel codice, usa matchAll, re.findall o preg_match_all per lo stesso effetto.

Perché .* prende troppo?

I quantificatori sono avidi: .* prende il più possibile e arretra solo se il resto fallisce. Usa .*? per la corrispondenza più corta, o una classe negata come [^"]* che è sia più veloce sia più chiara.

Come faccio a cercare un punto o una parentesi letterali?

Fai l’escape con un backslash: \. \[ \( \\. Lo strumento di escape per stringhe ha una modalità regex che fa l’escape di un intero letterale per te.

Cos’è il backtracking catastrofico?

Quantificatori annidati come (a+)+ su un input che non corrisponde fanno provare al motore un numero esponenziale di percorsi e lo bloccano. Evita di annidare quantificatori su insiemi sovrapposti, usa gruppi possessivi o atomici dove il motore li ha, oppure usa RE2 (Go, regex di Rust), che garantisce tempo lineare.