Comment utiliser les expressions régulières dans MySQL ? (regex, regexp)

Publié le 19 janvier 2008 par Mr32

Le principal avantage est de pouvoir construire des requêtes beaucoup plus complexes qu'un simple LIKE en exploitant toute la puissance des expressions régulières.

Quelques exemples basiques

SELECT * FROM clients WHERE nom LIKE 't%' ;
SELECT * FROM clients WHERE nom REGEXP '^t' ;

SELECT * FROM clients WHERE nom LIKE '%d' ;
SELECT * FROM clients WHERE nom REGEXP "d$";

Exemple plus difficile à réaliser avec un simple LIKE

SELECT * FROM clients WHERE nom REGEXP '^.{4}$' ;

Autre exemple : isoler un mot précis

SELECT * FROM textes WHERE contenu REGEXP '[^a-z]bonjour[^a-z]' ;

Si vous désirez que votre requête soit sensible à la casse, vous devez utiliser la commande REGEXP BINARY.

SELECT * FROM textes WHERE contenu REGEXP BINARY '[^a-zA-Z]Bonjour[^a-zA-Z]' ;

Attention: Au niveau sécurité, au delà de la protection contre les injections SQL, n'oubliez pas aussi de protéger vos requêtes contre les injections d'expressions régulières par rapport aux caractères spéciaux comme les ".", "*", "+", "?", etc...