REGEXP
Résolu
Heryu
Messages postés
567
Date d'inscription
Statut
Membre
Dernière intervention
-
Heryu Messages postés 567 Date d'inscription Statut Membre Dernière intervention -
Heryu Messages postés 567 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaiterais récupérer l'élément en gras à l'aide à l'aide des opérateurs relationnels :
<dgam>2</dgam>
<daut>1</daut>
<dlang>Anglais</dlang>
<dannee>1985</dannee>
<dcomp></dcomp>
<dnbj>1;3</dnbj>
<dduree>15;par joueur</dduree>
<dthe>11</dthe>
<dmeca>8;12;</dmeca>
<dage>3</dage>
<dedit>2</dedit>
<dtags>2</dtags>
<dstaff></dstaff>
<dyoutube></dyoutube>
Tout ce que j'ai pu récupérer pour le moment, c'est le contenu des 2 balises <dnbj> avec cette requête : <dnbj>(.*?)<\/dnbj>
Avez-vous une idée de comment récupérer cet élément ?
Merci d'avance =)
Je souhaiterais récupérer l'élément en gras à l'aide à l'aide des opérateurs relationnels :
<dgam>2</dgam>
<daut>1</daut>
<dlang>Anglais</dlang>
<dannee>1985</dannee>
<dcomp></dcomp>
<dnbj>1;3</dnbj>
<dduree>15;par joueur</dduree>
<dthe>11</dthe>
<dmeca>8;12;</dmeca>
<dage>3</dage>
<dedit>2</dedit>
<dtags>2</dtags>
<dstaff></dstaff>
<dyoutube></dyoutube>
Tout ce que j'ai pu récupérer pour le moment, c'est le contenu des 2 balises <dnbj> avec cette requête : <dnbj>(.*?)<\/dnbj>
Avez-vous une idée de comment récupérer cet élément ?
Merci d'avance =)
2 réponses
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.
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.
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
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 ?
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
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 =)