Il motore interno di MySQL possiede nativamente – oltre ai comuni operatori di uguaglianza, disuguaglianza e similitudine (LIKE) – un operatore molto utile: l’operatore REGEXP. Come il suo nome suggerisce, l’operatore REGEXP sfrutta la potenza delle espressioni regolari per effettuare ricerche complesse all’interno dei nostri database MySQL. La sintassi è semplicissima:
SELECT nome_campo
FROM nome_tabella
WHERE nome_campo REGEXP espressione;
In questo articolo, esploreremo come utilizzare l’operatore REGEXP, i principali caratteri speciali e forniremo esempi pratici per capire come possa semplificare le nostre interrogazioni nei database.
Vediamo di seguito una semplice tabella riassuntiva dei principali caratteri speciali e delle sintassi utilizzabili nell’espressione di raffronto:
^ | Inizio della stringa |
$ | Fine della stringa |
. | Un qualsiasi carattere |
[…] | Uno qualsiasi dei caratteri presenti tra le parentesi quadre |
[^…] | Un qualsiasi carattere tranne quelli presenti tra le parentesi quadre |
| | Separa caratteri o stringhe tra loro alternative |
* | Zero o più ripetizioni del carattere o della stringa precedente |
+ | Una o più ripetizioni del carattere o della stringa precedente |
{n} | “n” ripetizioni del carattere o della stringa precedente |
{min,max} | Ripete il carattere o la stringa precedente per un numero di volte comprese tra un minimo ed un massimo |
Facciamo qualche esempio pratico che, come al solito, vale più di mille parole. Per semplicità, faremo riferimento ad un ipotetico database agenda contenente i nomi dei nostri amici.
Esempi di utilizzo di REGEXP
1) Troviamo tutti i nomi che iniziano per “m”
SELECT nome FROM agenda WHERE nome REGEXP '^m';
La nostra query restituirà, ad esempio:
- Mara
- Marco
- Mario
- Milena
2) Troviamo tutti i nomi che finiscono per “o”
SELECT nome FROM agenda WHERE nome REGEXP 'o$';
La nostra query restituirà, ad esempio:
- Filippo
- Lucio
- Marco
- Mario
- Paolo
3) Troviamo tutti i nomi che iniziano per “m” e finiscono per “o”
SELECT nome FROM agenda WHERE nome REGEXP '^m.+o$';
La nostra query restituirà, ad esempio:
- Marco
- Mario
4) Troviamo tutti i nomi che contengono la lettera “r”
SELECT nome FROM agenda WHERE nome REGEXP 'r';
La nostra query restituirà, ad esempio:
- Clara
- Mara
- Marco
- Mario
5) Troviamo tutti i nomi che contengono i gruppi di lettere “ma” o “io”
SELECT nome FROM agenda WHERE nome REGEXP 'ma|io';
La nostra query restituirà, ad esempio:
- Lucio
- Mara
- Marco
- Mario
6) Troviamo tutti i nomi che NON contengono le lettere “m” e “a”
SELECT nome FROM agenda WHERE nome REGEXP '^[^ma]*$';
La nostra query restituirà, ad esempio:
- Filippo
- Lucio
Lascio al lettore il compito di testare ulteriormente le potenzialità dell’operatore REGEXP, dato che i possibili ambiti di utilizzo sono davvero tanti ed è difficile riassumerli in un breve articolo quale questo vuol essere. Sperimentando, è possibile scoprire altre combinazioni e applicazioni delle espressioni regolari che possono semplificare notevolmente il lavoro con i dati in MySQL.