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;
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.
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|ra';
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.