Espressioni regolari nelle query con MySQL
Articolo scritto da Max Bossi
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
SELECT nome FROM agenda WHERE nome REGEXP 'o$';La nostra query restituirà, ad esempio:
- Filippo
- Lucio
- Marco
- Mario
- Paolo
SELECT nome FROM agenda WHERE nome REGEXP '^m.+o$';La nostra query restituirà, ad esempio:
- Marco
- Mario
SELECT nome FROM agenda WHERE nome REGEXP 'r';La nostra query restituirà, ad esempio:
- Clara
- Mara
- Marco
- Mario
SELECT nome FROM agenda WHERE nome REGEXP 'ma|ra';La nostra query restituirà, ad esempio:
- Lucio
- Mara
- Marco
- Mario
SELECT nome FROM agenda WHERE nome REGEXP '[^ma]';La nostra query restituirà, ad esempio:
- Filippo
- Lucio
');







