Regex in italiano: guida definitiva (+ 35 esempi pronti)

Regex in italiano: guida definitiva (+ 35 esempi pronti) — Pacesoft

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

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-insensitive
  • g — 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.

← Torna all'elenco