(re)Bonjour,
Je pense avoir trouvé un bug sur les fonction preg_replace et preg_match...
historique de la découverte : http://www.developpez.net/forums/sho...d.php?t=179554
En effet, il semblerai que l'on ne puisse pas utiliser les paramètres du style '\\1' dès lors qu'il y a un signe $ dans les paramètres de ces fonctions...
En consultant l'aide de ces fonctions, j'ai vu que l'on pouvait appeler de manière obsolète les valeurs de la façon suivante : $1 si on veut recupérer la 1er parenthese dont l'expression correspond exactement au masque... et visiblement, cela doit poser un problème à l'interpréteur dès le moment où on utilise les valeurs récupérées (en utilisant indifférement $ ou \\) dans une méthode ou un index de tableau...
bon, comme je suis sur que j'ai pas été très clair, les exemples :
passons aux morceau de code ci dessous la chaine 'transforme moi [CC:1] s'il te plait !'
aucun problème...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $text = preg_replace("#(\[CC:)([0-9]*?)(\])#is", transforme('\\2'), $text);
ça, ça ne marche pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $tab = array('a','b','c','d'); $text = preg_replace("#(\[CC:)([0-3]*?)(\])#is", $tab['\\2'], $text);
ne marche pas non plus...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $text = preg_replace("#(\[CC:)([0-9]*?)(\])#is", $this->transforme('\\2'), $text);
J'ai beau cherché... je ne vois que le $ placé en début de 2ème paramètre qui puisse être responsable du non résultat... hypothèse d'autant plus crédible qu'il existe (pour la compatibilité descendante) une méthode de récupération des valeurs par $...
Alors ma question est : est-ce que je me fourvois complétement, et que je passe a coté de certaines subtilité du preg ? ou bien y'a t-il vraiment un bug a ce niveau là, et auquel cas, est-il possible de le contourner ?
Partager