Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Regex] problème de masque

3 réponses
Avatar
Leonick
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

3 réponses

Avatar
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

Un peu de doc :
http://fr2.php.net/manual/fr/reference.pcre.pattern.modifiers.php
Avatar
Olivier Miakinen
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>

Voir mon autre réponse pour une autre solution.
Avatar
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 ?