Le espressioni regolari (regex) rappresentano uno degli strumenti più temuti ma, al tempo stesso, più potenti nell'arsenale di un programmatore. Sebbene a prima vista possano sembrare una sequenza caotica di caratteri, una volta compresa la loro logica, diventano essenziali per manipolare testi, validare input utente, estrarre informazioni da log complessi e automatizzare operazioni di ricerca e sostituzione.

I Fondamenti delle Regex

Caratteri Letterali

La maggior parte dei caratteri rappresenta se stessa. Ad esempio, il pattern codice cercherà esattamente la sequenza di lettere "codice" all'interno di una stringa.

Metacaratteri di Controllo

Metacaratteri Comuni
.     Qualsiasi carattere (tranne il ritorno a capo)
^     Inizio della riga o stringa
$     Fine della riga o stringa
\d    Qualsiasi cifra numerica (0-9)
\w    Qualsiasi carattere alfanumerico o underscore (a-z, A-Z, 0-9, _)
\s    Spazio vuoto (spazi, tabulazioni, nuove righe)
\D    Qualsiasi carattere NON numerico
\W    Qualsiasi carattere speciale o non alfanumerico
\S    Qualsiasi carattere non di spaziatura
\b    Confine di una parola

Quantificatori

Quantificatori
*     Zero o più volte
+     Una o più volte
?     Zero o una volta (rende l'elemento opzionale)
{3}   Esattamente 3 volte
{2,5} Da un minimo di 2 a un massimo di 5 volte
{3,}  Almeno 3 volte o più

Classi di Caratteri

Le parentesi quadre permettono di definire un insieme di caratteri consentiti per una specifica posizione.

Classi di Caratteri
[aeiou]      Match di qualsiasi vocale
[a-z]        Match di qualsiasi lettera minuscola
[A-Za-z]     Match di qualsiasi lettera (case-insensitive)
[0-9]        Match di una cifra (equivalente a \d)
[^0-9]       Match di qualsiasi cosa che NON sia una cifra
[a-zA-Z0-9_] Equivalente a \w

Gruppi e Cattura

Logica dei Gruppi
// Le parentesi tonde creano gruppi di cattura
const match = "2025-07-08".match(/(\d{4})-(\d{2})-(\d{2})/);
// match[1] = "2025" (anno)
// match[2] = "07"   (mese)
// match[3] = "08"   (giorno)

// Gruppi nominati (migliorano la leggibilità)
const match2 = "2025-07-08".match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
// match2.groups.year  = "2025"

// Gruppi non catturanti (per raggruppare senza memorizzare)
/(?:https?|ftp):\/\//

Esempi Pratici di Utilizzo

Validazione Email (Base)

Regex per Email
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
emailRegex.test("[email protected]");  // true
emailRegex.test("indirizzo-errato");  // false

Validazione di uno Slug per URL

Regex per Slug
// Solo caratteri minuscoli, cifre e trattini singoli
const slugRegex = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
slugRegex.test("articolo-di-blog"); // true
slugRegex.test("Articolo Di Blog"); // false

Estrazione di Link da un Testo

Estrazione URL
const testo = "Visita https://google.com oppure http://sito.org.";
const urls = testo.match(/https?:\/\/[^\s]+/g);
// ["https://google.com", "http://sito.org"]

Forza Password

Regex Password Forte
// Almeno 8 caratteri, una maiuscola, una minuscola, un numero, un simbolo
const strongPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;

Regex in PHP

PHP e preg_match
// Controllo corrispondenza
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $data)) {
    echo "Formato data corretto";
}

// Sostituzione (creazione slug)
$slug = preg_replace('/[^a-z0-9]+/', '-', strtolower($titolo));

// Estrazione multipla
preg_match_all('/\b[A-Z][a-z]+\b/', $testo, $risultati);
// $risultati[0] contiene tutte le parole con l'iniziale maiuscola

Errori Comuni da Evitare

  • Comportamento Greedy (Avido): .* cercherà di catturare il più possibile. Usa .*? per una corrispondenza "lazy" (pigra).
  • Dimenticare l'Escape: Caratteri come ., *, + o ? hanno significati speciali. Se vuoi usarli letteralmente, anteponi sempre una barra rovesciata \.
  • Mancata ancoratura: Senza ^ (inizio) e $ (fine), potresti ottenere match parziali indesiderati.
  • Eccesso di ingegneria: Non usare le regex se metodi nativi come strpos() o includes() sono sufficienti e più performanti.

Prova i nostri strumenti per Sviluppatori

Converti, decodifica e formatta il tuo codice in un clic.