[php] PCRE ungreedy

  • Auteur de la discussion Auteur de la discussion ltressens
  • Date de début Date de début
WRInaute occasionnel
Bonjour,

Je n'arrive pas à rendre une regexp ungreedy (non gourmande).

Exemple :

Code:
preg_match_all(
  '/Word1.*?Word2/',
  'Word1 Word1 Word2',
  $matches);
print_r($matches);

Array
(
    [0] => Array
        (
            [0] => Word1 Word1 Word2
        )
)

Pour moi le ? dans .*? veut dire "en essayant de matcher le moins de positions possibles"... pas gourmande quoi...
Mais là où je m'attend à matcher "Word1 Word2", il matche "Word1 Word1 Word2"....

Une idée ?

Merci d'avance
 
WRInaute passionné
Hello,

et directement avec l'option Ungreedy ?
Code:
'/Word1.*Word2/U'
 
WRInaute occasionnel
idem avec le modifier /U

Mais je me suis rendu compte que ca fonctionne si je matche un espace :
Code:
Word1 *?Word2

Ca ne fonctionne pas avec le . :
Code:
Word1.*?Word2

Voilà, toujours aussi perplexe, mais merci de ta réponse bool !
 
WRInaute accro
ltressens a dit:
Pour moi le ? dans .*? veut dire "en essayant de matcher le moins de positions possibles"... pas gourmande quoi...
Mais là où je m'attend à matcher "Word1 Word2", il matche "Word1 Word1 Word2"....

man perlre a dit:
By default, a quantified subpattern is "greedy", that is, it will match as many times as possible (given a particular starting location) while still allowing the rest of the pattern to match.

Donc la différence, c'est "à partir d'un point de départ donné". Donc:
"Word1 Word1 Word2 Word1 Word2" =~ /Word1.*?Word2/ ne matchera que Word1 Word1 Word2 (plutôt que toute la chaîne), mais ne commencera pas plus tard (pour ne matcher que Word1 Word2).

ltressens a dit:
Mais je me suis rendu compte que ca fonctionne si je matche un espace :
Code:
Word1 *?Word2

Normal: tu n'acceptes que des espaces entre Word1 et Word2, donc forcément, Word1 Word2 ça passe alors que Word1 Word1 Word2 ça ne passe pas.

Si tu nous dit ce que tu cherches à faire précisément on peut peut-être te trouver une solution adaptée...

Jacques.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut