Mysql e le espressioni regolari Regex

Qundo si deve effettuare una ricerca di testo all’interno dei campi di una tabella del database spesso (quasi sempre) e’ necessario utilizzare le espressioni regolari , ma cosa sono ??

mysql screen

 

Le espressioni regolari (in inglese regular expression, o regexp, regex o RE) sono una sintassi attraverso la quale si possono rappresentare insiemi di stringhe , questo significa: dato un pattern che detta le regole e quindi rappresenta una espressione ben precisa, e’ possibile ricavare da un insieme di stringhe un’altro insieme risultante che appartiene al pattern .
In MySql si traduce nella possibilita’ di utilizzare una funzione REGEX nella clausola WHERE o SELECT che permette di confrontare il contenuto di un campo oppure una stringa con il pattern.

SELECT * FROM tabella WHERE campoDiTesto REGEXP “pattern”
o
SELECT “stringa” REGEX “pattern”;

La funzione REGEX retituisce 1 se la stringa o il campo e’ verificato dal pattern altrimenti restituisce 0.

Nel pattern sono contenuti dei caratteri speciali che dettano delle regole vediamone alcuni:

^ la stringa inizia con il carattere successivo
. Indica qualsiasi combinazione di caratteri o numeri compresi i ritorno a capo
\il caratere successivo non e’ una parola chiave
+ una o piu occorrenze della stringa o del carattere antecedente al simbolo
$ la stringa termina con il carattere precedente al simbolo
* il carattere precedente dovrà essere presente 0 (zero) o più volte
? il carattere precedente dovrà essere presente 0 (zero) o 1 (una) volta.
| Indica l’ OR di due stringhe precedenti e successive al simbolo es : we | nn = trova nella stringa le occorrenze di “we” oppure di “nn”.
(parola)* cerca 0 (zero) o più istanze della stringa “parola”
s{3,5} il carattere precedente alla { (parentesi graffa), in questo caso “s”, 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
[[:<:]]stringa[[:>:]] cerca il termine “stringa” all’interno di un insieme di stringhe ma non come sottostringa es: “stringa di testo” ritorna vero peche’ “stringa” e’ a se stante mentre “devi essere stingato” ritorna false perche’ stringa e’ una sottostringa di stringato.

Esempi:

SELECT “prova” REGEXP “[a-z]“;
trova una stringa che appartiene all’insieme delle lettere a-z
Restituisce 1 (vero).

SELECT “2133123 sds sdsdsdsds” REGEXP “([a-z][[:space:]]+)”;
Trova una stringa formata da una combinazione di caratteri e seguita da uno o piu spazi
Restituisce 1:

SELECT “video1.exe” REGEXP “^([a-z])*[0-9]{1,5}\.[a-z]{1,3}$”;

quest’ultima espressione verifica che il nome del file sia cosi formato
inizia con una o piu occorrenze di una parola formata da caratteri e seguita da un numero che va da 1 a 5 cifre seguito da un punto e una combinazioni di caratteri va da 1 a 3 massimo.

Restituisce 1

Ci si puo aiutare a creare espressioni regolari utilizzando dei programmi come, RegexDesigner

Lascia un commento