Cheat sheet
| Token | Corrisponde a |
|---|---|
| . | Qualsiasi carattere tranne l’a capo (con il flag s: qualsiasi carattere) |
| \d \w \s | Cifra; 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) |
| \b | Confine 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|b | Alternativa |
| (?=x) (?!x) (?<=x) (?<!x) | Lookahead, lookahead negativo, lookbehind, lookbehind negativo |
| \1 | Riferimento 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
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.