REGEXP
Résolu/Fermé
Heryu
Messages postés
567
Date d'inscription
mercredi 15 juillet 2009
Statut
Membre
Dernière intervention
28 juin 2016
-
Modifié par Heryu le 26/10/2015 à 17:30
Heryu Messages postés 567 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 28 juin 2016 - 27 oct. 2015 à 14:50
Heryu Messages postés 567 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 28 juin 2016 - 27 oct. 2015 à 14:50
2 réponses
Utilisateur anonyme
26 oct. 2015 à 21:12
26 oct. 2015 à 21:12
voilà /<dnbj>(\d);\d<\/dnbj>/, ton code captait tout ce qui se trouvait entre les balises <dnbj>, mais alors il te fallait préciser un tout petit peu. Ce truc fonctionnera en considérant que tu cibles un seul chiffre de 1 à 9, suivi d'un ; et d'un seul autre chiffre quelconque.
Heryu
Messages postés
567
Date d'inscription
mercredi 15 juillet 2009
Statut
Membre
Dernière intervention
28 juin 2016
62
27 oct. 2015 à 09:28
27 oct. 2015 à 09:28
Merci de ta réponse Sunr,
J'ai oublié de précisé que c'est pour une requête SQL et qu'il me semble que je ne peux pas récupérer de groupes.
J'ai testé ton code sur ce site : https://regexr.com/ et ça me récupère quand même, le contenu des 2 balises.
J'ai oublié de précisé que c'est pour une requête SQL et qu'il me semble que je ne peux pas récupérer de groupes.
J'ai testé ton code sur ce site : https://regexr.com/ et ça me récupère quand même, le contenu des 2 balises.
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 27/10/2015 à 10:57
Modifié par [Dal] le 27/10/2015 à 10:57
non, la regexp de Sunr capture bien le chiffre seul "1" avec les parenthèses.
le site que tu indiques ne montre que la ligne qui matche la regexp, pas la partie de la regexp capturée par les parenthèses.
avec Php, cela se récupère dans un tableau passé en 3ème argument https://www.php.net/preg_match ("Si matches est fourni, il sera rempli par les résultats de la recherche. $matches[0] contiendra le texte qui satisfait le masque complet, $matches[1] contiendra le texte qui satisfait la première parenthèse capturante, etc.").
Sinon, pour rendre la regexp plus flexible et matcher les chiffres qui suivent la balise ouvrante qu'il y en ait un ou plusieurs (donc un nombre entier quelconque), s'arrêter au ; s'il y en a un, matcher aussi s'il y a des chiffres après, mais ne pas échouer s'il n'y a rien après le ; et avant la balise fermante, tu peux utiliser une regexp plus flexible de ce type :
Dal
le site que tu indiques ne montre que la ligne qui matche la regexp, pas la partie de la regexp capturée par les parenthèses.
avec Php, cela se récupère dans un tableau passé en 3ème argument https://www.php.net/preg_match ("Si matches est fourni, il sera rempli par les résultats de la recherche. $matches[0] contiendra le texte qui satisfait le masque complet, $matches[1] contiendra le texte qui satisfait la première parenthèse capturante, etc.").
Sinon, pour rendre la regexp plus flexible et matcher les chiffres qui suivent la balise ouvrante qu'il y en ait un ou plusieurs (donc un nombre entier quelconque), s'arrêter au ; s'il y en a un, matcher aussi s'il y a des chiffres après, mais ne pas échouer s'il n'y a rien après le ; et avant la balise fermante, tu peux utiliser une regexp plus flexible de ce type :
/<dnbj>(\d+);*\d*<\/dnbj>/
Dal
Heryu
Messages postés
567
Date d'inscription
mercredi 15 juillet 2009
Statut
Membre
Dernière intervention
28 juin 2016
62
Modifié par Heryu le 27/10/2015 à 14:01
Modifié par Heryu le 27/10/2015 à 14:01
Merci de ta réponse [Dal],
Ta requête passe en effet les bon paramètres en PHP, mais en SQL, c'est une autre paire de manches ^^
J'ai tenté cette requête :
Et ça ne me ressort rien. Est-ce qu'au final, ce type de requête est impossible en SQL ?
Ta requête passe en effet les bon paramètres en PHP, mais en SQL, c'est une autre paire de manches ^^
J'ai tenté cette requête :
SELECT * FROM `table` WHERE column REGEXP('<dnbj>(\d+);*\d*</dnbj>') > 0
Et ça ne me ressort rien. Est-ce qu'au final, ce type de requête est impossible en SQL ?
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 27/10/2015 à 14:26
Modifié par [Dal] le 27/10/2015 à 14:26
Ah désolé, je n'avais pas compris que c'était une requête SQL comme tu postais dans le forum Php.
Le support dépend du SGMB utilisé, j'imagine, mais une requête SELECT devrait de toutes façons renvoyer une ligne (avec *, ou un champ si tu en en précises un) et non pas une partie d'un champ.
A ta place, je ferai en deux temps :
et j'appliquerai preg_match sur le résultat pour capturer les données qui t'intéressent.
Dal
Le support dépend du SGMB utilisé, j'imagine, mais une requête SELECT devrait de toutes façons renvoyer une ligne (avec *, ou un champ si tu en en précises un) et non pas une partie d'un champ.
A ta place, je ferai en deux temps :
SELECT * FROM table WHERE colum LIKE '<dnbj>%';
et j'appliquerai preg_match sur le résultat pour capturer les données qui t'intéressent.
Dal
Heryu
Messages postés
567
Date d'inscription
mercredi 15 juillet 2009
Statut
Membre
Dernière intervention
28 juin 2016
62
Modifié par Heryu le 27/10/2015 à 14:52
Modifié par Heryu le 27/10/2015 à 14:52
Ah mince j'avais pas fait gaffe au forum =s
Je pense que je vais mettre les informations dans des colonnes à part en BDD car il y a un count sur la même requête, et je ne peux pas dissocier ça en PHP, il faut que l'ensemble du script tienne sur une seule requête SQL ^^
En tout cas, merci de ton aide =)
Je pense que je vais mettre les informations dans des colonnes à part en BDD car il y a un count sur la même requête, et je ne peux pas dissocier ça en PHP, il faut que l'ensemble du script tienne sur une seule requête SQL ^^
En tout cas, merci de ton aide =)