Problème Preg_replace

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème Preg_replace

par starkeus » 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:

par Cyrano » 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).')';
}
//...

Problème Preg_replace

par starkeus » 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: