Le regex, spiegate
senza misteri.
Una guida pratica per capire cosa sono le espressioni regolari, come si leggono e come trasformarle in uno strumento quotidiano.
Cosa sono le espressioni regolari?
Una regular expression, abbreviata in regex, è un piccolo linguaggio per descrivere uno schema all’interno di un testo. Non dice quale parola cercare, ma quali caratteristiche deve avere ciò che stai cercando.
Una ricerca normale trova la parola ordine. Una regex può trovare tutti i codici ordine composti da tre lettere, un trattino e quattro cifre, anche se non conosci in anticipo il loro valore.
/\b[A-Z]{3}-\d{4}\b/gTestoOrdini: WEB-2048 e APP-7310
RisultatoWEB-2048 · APP-7310
Il testo cambia, ma tutto ciò che rispetta la forma dello stampino viene riconosciuto.
L’anatomia di una regex
Prendiamo un codice prodotto: deve iniziare con due lettere maiuscole, continuare con quattro cifre e terminare lì.
^inizio[A-Z]maiuscola{2}2 volte\dcifra{4}4 volte$fineLetta ad alta voce diventa: “dall’inizio alla fine, trova esattamente due maiuscole seguite da quattro cifre”. Il segreto è smontare sempre una regex in piccoli blocchi.
I mattoni fondamentali
I metacaratteri sono simboli con un significato speciale. Bastano questi pochi elementi per risolvere una grande parte dei casi reali.
| Simbolo | Significato | Esempio | Trova |
|---|---|---|---|
. | Qualsiasi carattere | c.t | cat, cot, cut |
\d | Una cifra da 0 a 9 | \d{2} | 07, 42 |
\w | Lettera, cifra o underscore | \w+ | utente_01 |
\s | Uno spazio o separatore | ciao\smondo | ciao mondo |
[abc] | Uno dei caratteri indicati | [aeiou] | una vocale |
[^abc] | Un carattere escluso | [^0-9] | non una cifra |
^ / $ | Inizio / fine del testo | ^OK$ | solo OK |
| | Alternativa logica | gatto|cane | gatto o cane |
Se cerchi un carattere che ha già un significato speciale, devi “escaparlo” con una barra inversa. Per esempio \. cerca un punto vero, mentre . indica qualsiasi carattere.
I quantificatori
I quantificatori specificano quante volte il blocco precedente può comparire. È qui che una ricerca rigida diventa flessibile.
*Zero o piùIl blocco è facoltativo e può ripetersi.
+Una o piùDeve esserci almeno una occorrenza.
?Zero o unaRende facoltativo un singolo blocco.
{n,m}Da n a mDefinisce un intervallo preciso.
/\+?39\s?\d{9,10}/gTestoChiamami al +39 3471234567
Risultato+39 3471234567
Gruppi, alternative e riferimenti
Le parentesi () raggruppano più elementi come se fossero un solo blocco. Servono per applicare un quantificatore, scegliere tra alternative o catturare una parte del risultato.
(rosso|verde|blu)accetta uno dei tre colori;(ab)+trova ab, abab, ababab e così via;(?:https?://)?gruppo non catturante e facoltativo;(\w+)@([\w.-]+)cattura separatamente nome e dominio.
JavaScript, Python, PHP e Java condividono le basi, ma possono differire per flag, delimitatori e funzioni avanzate.
Spazi bianchi, righe e flag regex
Uno spazio non è sempre un semplice spazio. Nei dati reali puoi incontrare tabulazioni, ritorni a capo e sequenze di separatori invisibili. Le classi dedicate rendono il pattern più robusto senza obbligarti a inserire quei caratteri a mano.
\sun carattere di spazio bianco: spazio, tab o nuova riga;\tuna tabulazione orizzontale;\r?\nun’interruzione di riga compatibile con file Windows e Unix;\Squalsiasi carattere che non sia uno spazio bianco.
I flag cambiano invece il modo in cui il motore interpreta l’intera espressione. Non fanno parte del pattern: in JavaScript compaiono dopo il delimitatore finale, come in /ordine/gi.
gRicerca globaleContinua dopo il primo risultato e restituisce tutte le corrispondenze.
iIgnora maiuscoleConsidera equivalenti, per esempio, “Regex”, “regex” e “REGEX”.
mModalità multilineaFa agire ^ e $ sull’inizio e sulla fine di ogni riga.
sDot allPermette al punto di includere anche i caratteri di nuova riga.
/^errore:.*$/gimTestoErrore: timeout Info: nuovo tentativo ERRORE: rete
RisultatoErrore: timeout · ERRORE: rete
Regex greedy, lazy, lookaround e backreference
Per leggere pattern avanzati devi distinguere quanto testo viene consumato, ciò che viene soltanto controllato e ciò che viene ricordato. Questi costrutti sono potenti, ma il loro supporto varia tra motori regex.
.+quantificatore greedy: prende la porzione più lunga che consente il match;.+?quantificatore lazy: si ferma alla porzione più corta possibile;foo(?=bar)lookahead positivo: trova “foo” solo se è seguito da “bar”;(?<=€)\d+lookbehind positivo: trova le cifre solo se sono precedute dal simbolo euro;\b(\w+)\s+\1\bbackreference: individua due parole consecutive uguali.
RE2, JavaScript, PCRE, Python e Java non implementano ogni costrutto allo stesso modo. Un lookbehind valido nel browser, per esempio, non è disponibile in RE2.
Cerca e sostituisci con i gruppi di cattura
Una regex non serve soltanto a trovare: i gruppi catturati possono essere riutilizzati nella stringa sostitutiva. È il metodo più rapido per riordinare date, normalizzare nomi, rinominare file o trasformare dati strutturati.
(\d{2})/(\d{2})/(\d{4}) → $3-$2-$1Testo29/07/2026
Risultato2026-07-29
$1, $2…richiamano i gruppi numerati in JavaScript e in molti editor;$&rappresenta l’intera corrispondenza in JavaScript;\1, \2…sono comuni nelle sostituzioni di altri strumenti e linguaggi.
La sintassi della sostituzione non è universale: verifica sempre la documentazione dell’editor, del linguaggio o del comando che stai usando.
A cosa servono davvero?
Cercare
Trova email, codici, date o parole con una determinata forma in grandi quantità di testo.
Validare
Controlla che un input rispetti un formato. La validazione completa richiede spesso anche logica applicativa.
Sostituire
Riformatta numeri, ripulisce spazi, rinomina file o trasforma dati usando i gruppi catturati.
Estrarre
Separa informazioni strutturate da log, documenti, URL e risposte testuali.
Le trovi negli editor, nei terminali, nei fogli di calcolo, negli analytics e in quasi ogni linguaggio. Sono perfette per riconoscere una forma testuale; non sono invece la scelta giusta per interpretare strutture profondamente annidate come HTML complesso.
Regex per SEO, Search Console, GA4 e URL
In ambito SEO le espressioni regolari aiutano a segmentare migliaia di query e URL senza esportare e filtrare ogni riga a mano. Sono utili per separare traffico brand e non brand, raggruppare directory, isolare pagine prodotto e controllare famiglie di URL durante una migrazione.
^(chi-siamo|contatti)/?$Gruppi di URLSeleziona più percorsi precisi con una sola espressione.
brand|prodottoQuery correlateInclude ricerche che contengono almeno uno dei termini indicati.
^/shop/[^/]+/$Pagine di categoriaTrova URL a un solo livello sotto la directory /shop/.
\.(pdf|docx?)$Tipi di fileRaggruppa download PDF, DOC e DOCX osservando la fine dell’URL.
Search Console usa RE2, applica normalmente un match parziale e non distingue le maiuscole. Google Analytics usa anch’esso RE2, ma la corrispondenza regex predefinita è completa e sensibile alle maiuscole. Ancoraggi e metacaratteri vanno quindi scelti in base allo strumento.
Nei redirect e nelle regole di riscrittura, la regex descrive spesso solo una parte della direttiva. Flag come [R=301,L] o [NC] appartengono alla configurazione del server, non al linguaggio delle espressioni regolari. Prima di pubblicare una regola, verifica destinazione, query string, stato HTTP e assenza di catene o loop di redirect.
Usa “contiene” o una corrispondenza esatta quando bastano. Passa a una regex solo quando devi rappresentare alternative, varianti o strutture ripetute.
Gli errori più comuni
Essere troppo permissivi. .* può catturare molto più del previsto. Parti dal caso più specifico possibile.
Dimenticare i confini. Usa ^, $ o \b per evitare corrispondenze parziali.
Testare solo il caso ideale. Prova input validi, non validi, vuoti, lunghi e con caratteri inattesi.
Voler fare tutto con una regex. Un pattern leggibile più un controllo nel codice è spesso più sicuro di una regex enorme.
Usare ripetizioni annidate senza limiti. Pattern ambigui come (a+)+ possono provocare backtracking catastrofico in alcuni motori. Preferisci limiti espliciti e blocchi non ambigui.
Una regex riconosce il formato di una data o email, ma non conferma che la data sia possibile o la casella attiva.
Un metodo pratico in 5 passi
- 1Scrivi la regola in italiano
Definisci con precisione cosa deve essere accettato e cosa no.
- 2Dividila in blocchi
Inizio, caratteri consentiti, quantità, separatori e fine.
- 3Traduci un blocco alla volta
Costruisci progressivamente, senza partire da una regex gigante.
- 4Testa esempi e controesempi
Ogni regola dovrebbe avere casi che passano e casi che falliscono.
- 5Semplifica e documenta
La regex migliore funziona e resta comprensibile anche tra sei mesi.
Costruisci la tua prima regex.
Scegli cosa vuoi riconoscere: il configuratore traduce le tue scelte in sintassi e ti mostra subito il risultato.