|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
ltressens WRInaute passionné

Inscrit le: 02 Avr 2004 Messages: 543 Localisation: Toulouse
|
Posté le : Dim Juin 08, 2008 17:29 Sujet du message: [php] PCRE ungreedy |
|
|
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 |
|
| |
|
 |
Bool WRInaute accro

Inscrit le: 26 Fév 2004 Messages: 1178 Localisation: Lyon
|
Posté le : Dim Juin 08, 2008 17:42 Sujet du message: [php] PCRE ungreedy |
|
|
Hello,
et directement avec l'option Ungreedy ?
|
|
| |
|
 |
ltressens WRInaute passionné

Inscrit le: 02 Avr 2004 Messages: 543 Localisation: Toulouse
|
Posté le : Dim Juin 08, 2008 17:53 Sujet du message: [php] PCRE ungreedy |
|
|
idem avec le modifier /U
Mais je me suis rendu compte que ca fonctionne si je matche un espace :
Ca ne fonctionne pas avec le . :
Voilà, toujours aussi perplexe, mais merci de ta réponse bool ! |
|
| |
|
 |
Bool WRInaute accro

Inscrit le: 26 Fév 2004 Messages: 1178 Localisation: Lyon
|
Posté le : Dim Juin 08, 2008 18:11 Sujet du message: [php] PCRE ungreedy |
|
|
| Euh.... dans mes souvenirs ça marchait bien pourtant :S |
|
| |
|
 |
jcaron WRInaute passionné

Inscrit le: 13 Fév 2004 Messages: 523 Localisation: Paris
|
Posté le : Dim Juin 08, 2008 22:58 Sujet du message: Re: [php] PCRE ungreedy |
|
|
| ltressens a écrit: |
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 écrit: |
| 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 écrit: |
| Mais je me suis rendu compte que ca fonctionne si je matche un espace :
|
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. |
|
| |
|
 |
| |
|
|