Bonjour,
Je voudrais récupérer "1°" avec la fonction preg_match_all
preg_match_all(/<b>(.*)?<\/b>/, "Resultats <b>1°</b> sur <b>110</b>
catégorie senior", $matches,PREG_PATTERN_ORDER);
Alors qu'elle me renvoit 1° sur 110.
Je croyais que le ? dans le masque permettait de ne prendre que la première
occurence.
Que faut-il modifier ?
Merci
--
Leonick
http://bike-in-ventoux.champignytriathlon.org les photos et le récit de 1000
km en vélo autour du Mont Ventoux
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Le 02/10/2004 08:11, Leonick a écrit :
Bonjour, Je voudrais récupérer "1°" avec la fonction preg_match_all preg_match_all(/<b>(.*)?</b>/, "Resultats <b>1°</b> sur <b>110</b> catégorie senior", $matches,PREG_PATTERN_ORDER);
Alors qu'elle me renvoit 1° sur 110. Je croyais que le ? dans le masque permettait de ne prendre que la première occurence.
Je crois que le « ? » doit suivre immédiatement le « * » pour qu'il soit pris en compte (non testé) : /<b>(.*?)</b>/
Sinon, tu as l'option U pour PCRE_UNGREEDY (pas testé non plus) : /<b>(.*)</b>/U
Bonjour,
Je voudrais récupérer "1°" avec la fonction preg_match_all
preg_match_all(/<b>(.*)?</b>/, "Resultats <b>1°</b> sur <b>110</b>
catégorie senior", $matches,PREG_PATTERN_ORDER);
Alors qu'elle me renvoit 1° sur 110.
Je croyais que le ? dans le masque permettait de ne prendre que la première
occurence.
Je crois que le « ? » doit suivre immédiatement le « * » pour qu'il soit
pris en compte (non testé) : /<b>(.*?)</b>/
Sinon, tu as l'option U pour PCRE_UNGREEDY (pas testé non plus) :
/<b>(.*)</b>/U
Un peu de doc :
http://fr2.php.net/manual/fr/reference.pcre.pattern.modifiers.php
Bonjour, Je voudrais récupérer "1°" avec la fonction preg_match_all preg_match_all(/<b>(.*)?</b>/, "Resultats <b>1°</b> sur <b>110</b> catégorie senior", $matches,PREG_PATTERN_ORDER);
Alors qu'elle me renvoit 1° sur 110. Je croyais que le ? dans le masque permettait de ne prendre que la première occurence.
Je crois que le « ? » doit suivre immédiatement le « * » pour qu'il soit pris en compte (non testé) : /<b>(.*?)</b>/
Sinon, tu as l'option U pour PCRE_UNGREEDY (pas testé non plus) : /<b>(.*)</b>/U
Je voudrais récupérer "1°" avec la fonction preg_match_all preg_match_all(/<b>(.*)?</b>/, "Resultats <b>1°</b> sur <b>110</b> catégorie senior", $matches,PREG_PATTERN_ORDER);
Alors qu'elle me renvoit 1° sur 110.
il faut préciser que tu ne veux pas des caractères <, b et > donc : /<b>[^<b>]*/
En fait, il s'arrêtera au premier « < », il est donc inutile de rajouter le « b » et le « > » dans ta liste de caractères à exclure, en revanche les parenthèses sont toujours nécessaires pour dire ce que tu veux garder.
Garder le « b » serait même néfaste car dans "<b>un degré sur un billion</b>" il garderait seulement "un degré sur un ".
Une proposition sera donc : /<b>([^<]*)/.
Mais ceci ne marchera pas pour, par exemple : <b>ceci <em>est</em> un exemple</b>
Voir mon autre réponse pour une autre solution.
Le 02/10/2004 10:47, Rue des Prairies a écrit :
Je voudrais récupérer "1°" avec la fonction preg_match_all
preg_match_all(/<b>(.*)?</b>/, "Resultats <b>1°</b> sur <b>110</b>
catégorie senior", $matches,PREG_PATTERN_ORDER);
Alors qu'elle me renvoit 1° sur 110.
il faut préciser que tu ne veux pas des caractères <, b et >
donc :
/<b>[^<b>]*/
En fait, il s'arrêtera au premier « < », il est donc inutile de rajouter
le « b » et le « > » dans ta liste de caractères à exclure, en revanche
les parenthèses sont toujours nécessaires pour dire ce que tu veux garder.
Garder le « b » serait même néfaste car dans "<b>un degré sur un
billion</b>" il garderait seulement "un degré sur un ".
Une proposition sera donc : /<b>([^<]*)/.
Mais ceci ne marchera pas pour, par exemple :
<b>ceci <em>est</em> un exemple</b>
Je voudrais récupérer "1°" avec la fonction preg_match_all preg_match_all(/<b>(.*)?</b>/, "Resultats <b>1°</b> sur <b>110</b> catégorie senior", $matches,PREG_PATTERN_ORDER);
Alors qu'elle me renvoit 1° sur 110.
il faut préciser que tu ne veux pas des caractères <, b et > donc : /<b>[^<b>]*/
En fait, il s'arrêtera au premier « < », il est donc inutile de rajouter le « b » et le « > » dans ta liste de caractères à exclure, en revanche les parenthèses sont toujours nécessaires pour dire ce que tu veux garder.
Garder le « b » serait même néfaste car dans "<b>un degré sur un billion</b>" il garderait seulement "un degré sur un ".
Une proposition sera donc : /<b>([^<]*)/.
Mais ceci ne marchera pas pour, par exemple : <b>ceci <em>est</em> un exemple</b>
Voir mon autre réponse pour une autre solution.
Olivier Miakinen
Le 03/10/2004 08:47, Leonick a écrit :
En fait, c'est tout à fait ça. Mais dans les tableaux des résultats, j'ai carrément enlevé les ° et er, pour un problème de gain de place en largeur.
Ok. N'oublie pas quand même que 1° peut vouloir dire primo (c'est-à-dire premièrement), mais pas premier.
Cela mis à part, as-tu résolu ton problème de « gourmandise » des expressions rationnelles PCRE ?
Le 03/10/2004 08:47, Leonick a écrit :
En fait, c'est tout à fait ça. Mais dans les tableaux des résultats, j'ai
carrément enlevé les ° et er, pour un problème de gain de place en largeur.
Ok. N'oublie pas quand même que 1° peut vouloir dire primo (c'est-à-dire
premièrement), mais pas premier.
Cela mis à part, as-tu résolu ton problème de « gourmandise » des
expressions rationnelles PCRE ?