Tutti gli articoli

Espressioni regolari: sintassi di base e pattern comuni

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.

Prova lo strumento