Un'espressione regolare (regex) è un modo compatto per descrivere uno schema di testo: non una stringa specifica, ma una regola a cui una stringa deve corrispondere. Invece di scorrere i caratteri uno a uno in un ciclo, un'unica espressione può verificare o trovare una struttura complessa.
I blocchi di base
- Classi di caratteri —
\d(cifra),\w(lettera/cifra/underscore),\s(spazio), oppure una classe personalizzata come[a-zA-Z]. - Quantificatori —
*(0 o più),+(1 o più),?(0 o 1),{2,5}(da 2 a 5 volte). - Gruppi di cattura — le parentesi
(...)isolano una parte della corrispondenza, utilizzabile poi separatamente, ad esempio in una sostituzione. - Ancore —
^e$legano lo schema all'inizio o alla fine di una riga.
Perché \w non riconosce le lettere accentate italiane
Nel motore di espressioni regolari di JavaScript, su cui gira questo strumento, \w significa sempre e solo [A-Za-z0-9_] — lettere ASCII, cifre e underscore. Le vocali accentate italiane à, è, é, ì, ò, ù restano fuori da questo intervallo, quindi /^\w+$/.test('città') restituisce false. Aggiungere il flag u non cambia la definizione di \w: per intercettare correttamente le lettere accentate serve una classe esplicita basata sulle proprietà Unicode, come /^\p{L}+$/u, cioè "qualsiasi lettera", disponibile solo insieme al flag u. Va notato anche l'apostrofo dell'elisione (l'amico, dell'anno): non fa parte di \w, quindi un pattern \w+ applicato ingenuamente spezza la parola esattamente all'apostrofo.
Corrispondenza avida contro pigra
Per impostazione predefinita i quantificatori sono "avidi" — cercano di catturare quanti più caratteri possibile, cedendo solo se questo impedisce la corrispondenza. Ad esempio <.+> su <a>text</a> catturerebbe tutto dal primo < all'ultimissimo >. Aggiungere ? dopo un quantificatore (<.+?>) lo rende "pigro" — cattura il minimo possibile, fermandosi alla prima corrispondenza valida.
A cosa serve
- Validare il formato dei dati in ingresso (email, numero di telefono, codice postale).
- Cercare e sostituire testo in blocco in base a uno schema, non a una corrispondenza esatta.
- Estrarre dati strutturati da log o testo non strutturato.
Backtracking catastrofico
Quantificatori annidati come (a+)+ possono, su certi input, costringere il motore regex a provare un numero esponenziale di combinazioni prima di concludere che non c'è corrispondenza — la pagina o il server si "bloccano" su un'espressione apparentemente semplice. È una classe di vulnerabilità reale (ReDoS), quindi i quantificatori annidati complessi vanno testati su stringhe lunghe "quasi corrispondenti", non solo sugli esempi attesi.