|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre expérimenté
![]() Inscription : mai 2002 Messages : 673 ![]() |
Bonjour,
désolé, ma question risque de paraitre un peu stupide, mais je ne comprend vraiment pas le comportement de preg_match_all()... Je récupère une chaine de caractère contenant des marqueurs que je doit remplacer par des chaines de caracteres. J'essaye donc d'utiliser la fonction preg_match_all, mais je n'arrive vraiment pas a comprendre comment ça marche. Je fait des 1er test pour essayer de recupérer dans un premier temps toutes les valeurs numérique d'une chaine de caractère. j'ai donc écrit : Code :
$nb = preg_match_all("#([0-9]*?)#i", $text, $ret, PREG_PATTERN_ORDER); J'ai fait des tas de test pour essayer de comprendre comment cela fonctionnait, mais rien a faire (je post pas mes tests ici, inutils et trop nombreux... La version posté ici est une version parmis tant d'autre). Quelqun pourrait-il m'expliquer ce qui ne vas pas la dedans ? |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Inscription : février 2006 Messages : 493 ![]() |
Copaing !!
Alors de ce que j'ai compris de preg_matches_all, pour afficher, il te suffit de faire print_r($ret) Il te sortira tous les résultats qui correspondent à ton expression régulière Le résultat est sous forme de array donc normal que ce soit pas très lisible |
|
|
00
|
|
|
#4 | ||||||
|
Membre expérimenté
![]() Inscription : mai 2002 Messages : 673 ![]() |
Arf, j'ai trouvé la solution... enfin je veux dire la solution a mon problème dans l'ensemble... En fait, j'avais une chaine de caractere contenant des "marqueurs" contenant eux même des valeurs. Suivant le marqueur trouvé, j'applique la valeur qu'il contient en paramètre à une fonction.
par exemple, j'ai un marqueur [#£{num}£#] ou {num} est une valeur numérique, et [#£ et £#] le marqueur (qui définit la fonction a appeler). La solution a mon problème ne passes pas par un preg_match(), mais par un preg_replace(). Voici un code d'exemple ré-écrit en esperant qu'il pourra aider du monde : Code :
En développant un peu, j'imagine qu'on doit pouvoir ecrire (toujours pour exemple ludique, et donc non testé) Code :
Ce qui par déduction explique les currieux tableaux (preg_match_all) que j'ai obtenu a l'aide du post de trihanchcie qui doivent ainsi contenir : Code :
|
||||||
|
|
00
|
|
|
#5 | ||
|
Membre expérimenté
![]() Inscription : mai 2002 Messages : 673 ![]() |
(re-)Arf...
Bha voila, je penais avoir compris et que la suite serait du gateau, et vlan... nouveau problème... Code :
Résultat, ma method $this->ShowTab() reçoie en paramètre '\2'... (j'ai testé avec simple et double quote) au lieu de recevoir la valuer numérique contenue dans mon marqueur... Il n'a donc visiblement pas interprété le symbole '\\2' comme il aurait du... Quelqun a une explication ? cela peut-il être lié au fait que je soit dans une class ? (PS : j'obtient le meme resultat en ecrivant une fonction transfrome DANS la fonction DOC()) |
||
|
|
00
|
|
|
#6 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
Dans certaines situations, il est préférable d'utiliser preg_replace_callback() dont tu pourras trouver un exemple d'utilisation ici : http://g-rossolini.developpez.com/tu...ns-regulieres/
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() Inscription : mai 2002 Messages : 673 ![]() |
merci, j'essaye ça tout de suite
|
|
|
00
|
|
|
#8 |
|
Membre expérimenté
![]() Inscription : mai 2002 Messages : 673 ![]() |
J'ai pas utiliser le callback, car avec l'option 'e', la méthode ci-dessous fonctionne :
Code :
$text = preg_replace("#(\[\#§)([0-9]*?)(§\#\])#ise", "\$this->ShowTab('\\2')", $text); pb résolu |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com