Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Les regex et MYSQL


Mysql
Nul n'est besoin de vous rappeler que le champ d'application des regex est très vaste.
La puissance des regex peut également être appliquée aux requêtes Mysql.
On ne va plus faire de cours ni de rappel sur les symboles et autres caractères.
Le plus intéressant à ce stade c'est d'entrer directement dans le champ d'application des expressions régulières pour Mysql.

Tout par l'exemple !
A noter que la syntaxe utilisée est : select... blabla ... REGEXP(motif)

1) Un truc simple... des prénoms !

Imaginons que nous ayons une table membres avec un champ nom et prénom. Imaginons maintenant que parmi la centaine d'enregistrements, nous souhaitions récupérer tous les noms des membres dont le prénom est Alain, Pierre et Jean.

$req="SELECT nom,prenom from $table WHERE prenom REGEXP '(Alain|Pierre|Jean)'";
?>

Voilà, cette regexp va nous sortir tous les noms qui ont comme prénom ceux énumérés et est nettement plus courte qu'une classique :

$req="SELECT dep,nom,prenom FROM $table WHERE prenom='Alain' OR prenom='Jean' OR prenom='Gilbert'";

Bien sûr on pourrais également écrire plus simplement (et sans REGEXP) :

$req = "SELECT dep,nom,prenom FROM $table WHERE prenom IN('Alain','Pierre','Jean')"

2) Avec des chiffres

Imaginons que nous ayons une table code articles et que nous souhaitions récupérer tous les codes qui contiennent 4 chiffres mais uniquement de 2 à 9

$req="select code_article from $table where code_article REGEXP '([2-9]{4})'";
?>
Voilà, cette regexp va nous sortir tous les codes qui ont 4 chiffres et uniquement ceux qui ne contiennent rien d'autre que des 2,3,4,5,6,7,8,9

3) Avec des URL

Imaginons que nous ayons une table contenant des url que nous voulons trier avant affichage

$motif='^(http://(www\.)?[^/]+/[^/]*)$';

$req="select url from latable where url REGEXP '".$motif."'"
?>
Voilà, cette regexp va nous sortir et récupérer uniquement des URL de ce type : http://www.domaine.ext/nimporte_quoi_derriere http://sousdomaine.domaine.ext/nimporte_quoi_derriere http://www.domaine-domaine.ext/nimporte_quoi_derriere http://sousdomaine.domaine-domaine.ext/nimporte_quoi_derriere

Il est à noter qu'au niveau performances, REGEXP n'est pas terrible et pour un moteur de recherche on préfèrera utiliser les index FULL TEXT.

Les expressions régulières avec Mysql - Regex - Regexp





ADAM Benjamin 2008 | Admin