Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
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
