(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 !'

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$text = preg_replace("#(\[CC:)([0-9]*?)(\])#is", transforme('\\2'), $text);
aucun problème...

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);
ça, ça ne marche pas...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
$text = preg_replace("#(\[CC:)([0-9]*?)(\])#is", $this->transforme('\\2'), $text);
ne marche pas non plus...

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 ?