back to top

MySQL REGEXP: espressioni regolari nelle query con MySQL

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.

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Come ottenere l’ID dell’ultimo record inserito in MySQL, PostgreSQL, SQL Server e Oracle?

Ottenere l'ID dell'ultimo record inserito in una tabella, dopo...

Database completo regioni, province e comuni italiani (in formato SQL)

Quando si sviluppa un sito web o un'applicazione in...

File CSV: cosa sono, come si aprono e come crearli

In questo articolo cercheremo di capire cos'รจ il formato...

Confrontare due tabelle e trovare i record senza corrispondenza

all'interno di un database relazionale può essere utile poter...

Eseguire comandi SQL online con SQL Fiddle

Sì. E' possibile testare codice SQL senza aver installato...

SQL: Calcolare la media dei valori di più campi

Attraverso una semplice query SQL è possibile calcolare dinamicamente...
Pubblicitร