akred3
Janvier 8, 2010, 11:21
1
Bonjour à tous,
Voilà j’ai rencontré un code sur le net que je ne comprends pas:
preg_replace("/#[url\]www.(.*?)\[\/url\]#i", $texte);
Le problème, c’est quand faisant la combinaison des 3 je vois pas.
Je sais que le point signifie n’importe quel caractère, “" -> 0 ou plus et “?” -> 0 ou 1
D’ailleurs, avec ". ”, ça voudrais dire n’importe quel caractère apparu 0 ou plus de fois ( c’est à dire le même à la suite ? ou n’importe quel chaîne de caractères qui suit ? )
Et après en ajoutant le “?”, je vois pas ^^
Merci
Ton pattern est de toute manière faux, le “/” devant n’a pas à être là ou ce sont les # au choix.
Pour ta question, .*? ou .+? c’est pour que cela soit moins greedy.
fr2.php.net…
Par défaut, les quantificateurs sont dits “gourmands”, c’est à dire, qu’ils cherchent d’abord à trouver le nombre maximal de répétitions qui autorisent le succès de la recherche. L’exemple classique posé par cette gourmandise est la recherche de commentaires d’un programme en C. Les commentaires apparaissent entre les séquences /… / et à l’intérieur de ces délimiteurs, les * et / sont autorisés. Appliquer le masque /*.*/ à la chaîne / premier commentaire / aucun commentaire / second commentaire / ne peut réussir, car le masque travaille sur toute la chaîne, à cause de la gourmandise du caractère . .
Cependant, un quantificateur suivi d’un point d’interrogation cesse d’être gourmand, et au contraire, ne recherche que le nombre minimum de répétition. Dans ces conditions, le masque /*.*?*/ trouvera bien les commentaires du code C. La signification des autres quantificateurs n’est pas changée. Attention à ne pas confondre l’utilisation du point d’interrogation ici avec son utilisation comme quantificateur lui-même. À cause de cette ambiguïté, il peut apparaître des situations où il faut le doubler : \d??\d Ce masque va tenter de lire un seul chiffre, mais le cas échéant, il acceptera 2 chiffres pour permettre à la recherche d’aboutir.
akred3
Janvier 9, 2010, 12:41
3
J’ai ajouté accidentellement le / dans l’expression
J’ai compris, merci beaucoup pour cette explication.