Le espressioni regolari (regex) sono il coltellino svizzero per cercare, validare e trasformare testo. In questa guida trovi sintassi, flag e 35 esempi da copiare subito (email, URL, numeri, date, CAP, CF, IBAN, ecc.).
Indice
- Sintassi rapida
- Flag principali
- Gruppi, riferimenti & non-capturing
- Lookaround (advanced)
- 35 regex pronte (per categoria)
- Sostituzioni comuni
- Performance & consigli
- FAQ
Provalo subito: apri il nostro Regex Tester (con evidenziazione e gruppi).
Sintassi rapida
.— qualunque carattere (tranne newline)\d\w\s— cifra / alfanumerico / spazio[abc][^abc][a-z]— classe, negata, intervallo^$— inizio / fine stringa*+?{m,n}— quantificatori|— “oppure”( )— gruppo di cattura(?: )— gruppo non catturante
Tip: con i quantificatori usa spesso la versione non-greedy con ? (es. .+?) per evitare catture troppo ampie.
Nota: alcune sintassi variano tra motori (PCRE, JS, .NET). Gli esempi sono compatibili con JavaScript/PCRE salvo nota.
Flag principali
i— case-insensitiveg— globale (tutti i match)m— multi-line (^e$considerano i newline)s— dotall (il punto include newline)u— unicode (JS)
Gruppi, riferimenti & non-capturing
# Gruppo di cattura
(\d{2})/(\d{2})/(\d{4})
# Non-capturing (non crea $1, $2, …)
(?:http|https)://
# Backreference (ripete esattamente il gruppo 1)
(\w+)\s+\1
Consiglio: usa i gruppi solo quando servono. Se ti serve raggruppare ma non “catturare”, preferisci (?: ).
Lookaround (advanced)
# Lookahead positivo: “seguito da …”
foo(?=bar)
# Lookahead negativo: “NON seguito da …”
foo(?!bar)
# Lookbehind positivo (PCRE/.NET/JS moderno)
(?<=foo)bar
# Lookbehind negativo
(?<!foo)bar
Attenzione: il supporto dei lookbehind in JavaScript è relativamente recente; verifica sul tuo ambiente.
35 regex pronte (per categoria)
Email (uso pragmatico)
([A-Za-z0-9._%+-]+)@([A-Za-z0-9.-]+\.[A-Za-z]{2,})
Nota: nessuna regex copre tutte le email valide RFC. Per verifiche serie abbina sempre controlli DNS/MX.
URL (http/https)
https?:\/\/[^\s]+
CAP italiano
\b\d{5}\b
Telefono (ripulisci, poi normalizza)
[+\s]*(\d[\s-]? ){6,15}
Codice Fiscale (forma, checksum a parte)
^[A-Z]{6}[0-9A-Z]{2}[A-EHLMPRST][0-9A-Z]{2}[A-Z][0-9A-Z]{3}[A-Z]$
IBAN (forma base)
^[A-Z]{2}\d{2}[A-Z0-9]{1,30}$
Partita IVA IT (11 cifre)
^\d{11}$
Data gg/mm/aaaa
\b(0?[1-9]|[12]\d|3[01])\/(0?[1-9]|1[0-2])\/\d{4}\b
Ora hh:mm (24h)
\b([01]\d|2[0-3]):[0-5]\d\b
Numero intero (segno opz.)
^[+-]?\d+$
Decimale (punto o virgola)
^[+-]?\d+(?:[.,]\d+)?$
Parola (ASCII)
\b\w+\b
Solo lettere A-Z
^[A-Za-z]+$
IPv4
\b((25[0-5]|2[0-4]\d|1?\d?\d)(\.|$)){4}\b
Tag HTML (grezzo)
<\/?[\w-]+(?:\s+[\w:-]+(?:=(?:".*?"|'[^']*'|[^\s"'>=]+))?)*\s*\/?>
Rimuovi spazi multipli
\s{2,}
Parole duplicate adiacenti
\b(\w+)\s+\1\b
Colore HEX
#(?:[0-9A-Fa-f]{3}){1,2}\b
Username “safe”
^[A-Za-z0-9._-]{3,16}$
Dominio (semplificato)
\b[a-z0-9-]+(?:\.[a-z0-9-]+)+\b
File .csv
^.*\.csv$
JSON “grezzo” (greedy)
\{[\s\S]*\}
IPv6 (semplificato, senza ::)
(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}
Data ISO 8601 (aaaa-mm-gg)
\b\d{4}-\d{2}-\d{2}\b
Timestamp ISO 8601
\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2})?(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})\b
UUID v4
\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}\b
Base64 (blocco)
(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?
Carta di credito (grezza, no Luhn)
\b(?:\d[ -]*?){13,19}\b
Slug URL
^[a-z0-9]+(?:-[a-z0-9]+)*$
Targa italiana (formato attuale)
^[A-Z]{2}\d{3}[A-Z]{2}$
YouTube URL
https?:\/\/(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)\w[\w-]*
Markdown link
\[(.*?)\]\((.*?)\)
Rimuovi tag HTML (grezzo)
<[^>]+>
Campo CSV tra virgolette
"(?:[^"]|"")*"
IBAN Italia (forma 27 char)
^IT\d{2}[A-Z]\d{10}[0-9A-Z]{12}$
Colore CSS rgb()
^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$
Sostituzioni comuni (JavaScript)
// Normalizza spazi multipli
text.replace(/\s{2,}/g, ' ');
// “Cognome, Nome” → “Nome Cognome”
text.replace(/^(^[^,]+),\s*(.+)$/gm, '$2 $1');
// Prendi solo i numeri di telefono
text.replace(/[^\d+]+/g, '');
Performance & consigli
- Evita
.*“libero”: usa ancore^…$e classi mirate. - Preferisci non-capturing
(?: )quando non ti serve il gruppo. - Attento al catastrophic backtracking con pattern ambigui (es.
(a+)+). - Per validazioni “serie” (email, CF, IVA) unisci regex + logica applicativa.
FAQ
La regex per email “perfetta” esiste?
No. Usa una regex pragmatica + verifica MX/SMTP lato server quando serve.
Perché la mia regex blocca il browser?
Possibile backtracking esplosivo. Riduci i quantificatori e usa ancore.
Come provo gli esempi?
Apri un tester regex, incolla pattern e testo per visualizzare match e gruppi.
