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.