Livello di difficoltà: |
|
MySQL è il database open source per eccellenza. Cresciuto molto in questi anni, è diventato il DBMS più utilizzato dalla comunità open source e apprezzato anche da chi scrive pagine con tecnologie diverse da PHP e su server diversi da Linux.
|
| |
Le regular expressions con MySQL
MySQL
MySQL supporta l'utilizzo delle Regular Expressions (o espressioni regolari) all'interno delle query.
Per utilizzarle, un esempio di sintassi può essere la seguente:
SELECT * FROM nomeTabella WHERE nomeCampo REGEXP "pattern";
Il pattern include le istruzioni per verificare la regular expression. Sono tanti i caratteri speciali ammessi nell'espressione regolare. Partiamo da un esempio pratico per analizzarli tutti. Ammettiamo di voler cercare tutti quei campi i cui valori iniziano con la lettera "r" e finiscano con la lettera "o". Faremo:
SELECT * FROM nomeTabella WHERE nomeCampo REGEXP "^r.+o$";
Vediamo cosa significano i simboli usati nella query appena vista:
- ^ che inizia con il carattere successivo
- . cerca ogni tipo di carattere (anche ritorni a capo)
- + che siano presenti una o più volte
- $ che termini con il carattere precedente
In questo modo, i risultati precedenti comprenderanno valori come:
- roberto
- Roberto
- ROBERTO
- romolo
- Rho
Ma non stringhe tipo "ro". Perché tra il carattere "r" e "o" ci dovrà essere almeno un altro carattere. Neppure termini come "alrogo" o "arrotare" sarebbero accettati, perché la stringa dovrà iniziare con "r" e finire con "o".
Altri caratteri speciali
Le regular expressions con MySQL supportano comunque altri caratteri speciali. Vediamoli tutti, anche quelli appena analizzati, qui di seguito:
- ^ che iniziano con il carattere successivo
- $ che finiscano con il carattere precedente
- . cerca ogni carattere
- * il carattere precedente dovrà essere presente 0 (zero) o più volte
- + il carattere precedente dovrà essere presente 1 (una) o più volte
- ? il carattere precedente dovrà essere presente 0 (zero) o 1 (una) volta
- questo|altro cerca la stringa "questo" oppure (OR) la stringa "altro"
- (parola)* cerca 0 (zero) o più istanze della stringa "parola"
- a{3,5} il carattere precedente alla { (parentesi graffa), in questo caso "a", dovrà essere presente almeno 3 volte, ma non più di 5 volte
- [b-eFl] cerca una stringa che contenga le lettere dalla "b" alla "e" (b c d e), e anche la lettera "F" e la lettera "l"
- [^b-eFl] cerca una stringa che NON contenga le lettere dalla "b" alla "e" (b c d e), e anche la lettera "F" e la lettera "l"
- "[[:stringa:]] cerca il termine "stringa", preceduto o seguito da qualunque carattere ("questa è una megastringa MySQL" sarebbe accettato)
- [[:<:]]stringa[[:>:]] cerca il termine "stringa" che sia una parola a sé stante (ovvero separata da ciò che c'è prima e dopo da almeno uno spazio ("questa è una stringa per MySQL" sarebbe accettato ma "questa è una megastringa per MySQL" non sarebbe accettato).
Vediamo qualche esempio pratico:
SELECT "prova" REGEXP "[a-z]";
Restituisce 1 (vero).
SELECT "02800111222" REGEXP "^[0-9]{1,}[0-9]$";
Restituisce 1, ma anche:
SELECT "02800111222" REGEXP "^[0-9]+[0-9]$";
Restituisce 1. Il simbolo + infatti, significa presente una o più volte. I simboli {1,} significano appunto presente almeno 1 (una) volta, e il massimo di volte non è indicato (quindi una o più volte).
|