Utilizzare le espressioni regolari in MySQL

MySQL offre un supporto basilare per le espressioni regolari tramite l'operatore REGEXP (o il suo sinonimo RLIKE). Questo permette di effettuare confronti su stringhe utilizzando pattern di ricerca flessibili.

Sintassi di Base

La sintassi generale per usare REGEXP è la seguente:

SELECT * FROM tabella WHERE colonna REGEXP 'pattern';

Il pattern è una stringa che descrive ciò che si vuole cercare. Ad esempio:

SELECT * FROM utenti WHERE nome REGEXP '^A';

Questo esempio restituisce tutti i record in cui il campo nome inizia con la lettera "A".

Operatori Comuni nelle Espressioni Regolari di MySQL

  • . — Qualsiasi singolo carattere
  • [abc] — Qualsiasi carattere tra a, b o c
  • [a-z] — Qualsiasi carattere minuscolo
  • ^ — Inizio della stringa
  • $ — Fine della stringa
  • * — Zero o più occorrenze
  • + — Una o più occorrenze
  • {n} — Esattamente n occorrenze

Esempi Pratici

1. Trovare email che terminano con .com:

SELECT * FROM utenti WHERE email REGEXP '\\.com$';

2. Selezionare numeri di telefono che iniziano con +39:

SELECT * FROM contatti WHERE telefono REGEXP '^\\+39';

3. Filtrare parole che contengono solo lettere:

SELECT * FROM parole WHERE testo REGEXP '^[A-Za-z]+$';

REGEXP vs LIKE

Mentre LIKE permette solo un pattern matching semplice (con % e _), REGEXP offre una maggiore flessibilità. Tuttavia, REGEXP può essere più lento su tabelle grandi se non si usano gli indici correttamente.

Case Sensitivity

Le espressioni regolari in MySQL sono case-insensitive per impostazione predefinita su collation case-insensitive (come utf8_general_ci), ma diventano case-sensitive se la collation lo è (ad esempio utf8_bin).

Limitazioni

MySQL utilizza una versione semplificata delle espressioni regolari POSIX. Non supporta alcune funzionalità avanzate come i lookahead/lookbehind o i gruppi di cattura. Per esigenze più complesse, si può valutare di elaborare i dati lato applicativo oppure usare funzioni UDF o stored procedure avanzate.

Conclusione

L'uso di REGEXP in MySQL consente di effettuare ricerche sofisticate all'interno delle stringhe. È uno strumento utile per la validazione dei dati, la ricerca avanzata e il filtraggio complesso, purché si conoscano i suoi limiti e si usi con attenzione in termini di performance.

Torna su