Problème Preg_replace

Eléphant du PHP | 441 Messages

22 déc. 2005, 13:17

Edit: j'ai trouvé..c'était le $ qu'il fallait échapper :roll:

bonjour à tous!
je souhaite remplacer des éléments de ma chaine de caractères pas d'autres avec preg_replace.

Voici ce que je veux faire exactement :
j'ai une chaine: (champ1)+(champ2)+(champ3)
je souhaite obtenir la chaine suivante: ($1)+($2)+($3)

voici mon code:
$string="(champ1)+(champ2)+(champ3)";
$patterns="(\([_\-0-9\w\s]+\))";
echo $string."<br>";
echo preg_match_all ($patterns, $string, $resultat);
//j'ai tous les éléments que je dois remplacer dans mon tableau de résultat
echo "<pre>";
print_r($resultat);
echo "</pre>";

echo "<pre>";
echo count($resultat[0]);
echo "</pre>";

//je constitue mon tableau de remplacement
$replace=array();
for ($i = 0 ; $i < count($resultat[0]) ; $i ++)
	//$replace[$i]='($'.($i+1).')';
$replace[$i]='\$'.($i+1);

echo "<pre>";
print_r($replace);
echo "</pre>";

//je remplace...
$string = preg_replace ($resultat[0], $replace, $string);
	
echo "<pre>";
echo $string;
echo "</pre>";

//j'obtiens: ()+()+()
Hélas je n'obtiens pas ce que je veux: ()+()+() au lieu de ($1)+($2)+($3)

Je suis loin d'être une bête en regex...mais mes patterns me semblent corrects.

Pourriez-vous m'aider SVP? :roll:
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes

Mammouth du PHP | 19672 Messages

22 déc. 2005, 13:46

Dans ta boucle for, il faut ajouter un échappement sur le "$" si tu ne veux pas qu'il soit interprété:
//...
$replace=array();
for ($i = 1 ; $i <= count($resultat[0]) ; $i ++)
{
    $replace[$i]='(\$'.($i).')';
}
//...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 441 Messages

22 déc. 2005, 14:23

Merci Cyrano je m'en suis rendu après...je ne pensais pas que l'élément de remplacement était interprêté comme une expression régulière... comme quoi faut lire la doc sérieusement :roll:
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes