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.