8791 sujets

Développement web côté serveur, CMS

Salut à tous,

J'aimerais remplacer certaines sous chaines d'une chaine de caractère, par une ligne d'un tableau.
Par exemple, imaginons la chaine suivante :

Interdum et malesuada Toto12 fames ac Toto21 Toto32 ante ipsum primis Toto44 in faucibus.

J'aimerais que Toto12 soit remplacé par mon_tableau[12],
Toto21 par mont_tableau[21]
etc...

Je pensais bêtement pouvoir utiliser preg_replace et sortir la référence correspondante à l'index de mon tableau, du genre preg_replace('#Toto([0-9]+)#', $mon_tableau[$1], $ma_chaine);.

Mais bien évidemment ça ne fonctionne pas !

Du coup quelle serait la bonne technique ?
Merci pour vos pistes Smiley smile
Modifié par The_Moye (09 Mar 2014 - 17:07)
Alternativement, tu as aussi l'option e de preg_replace.
Elle est dangereuse d'un point de vue sécuritaire si utilisée à mauvais escient, mais dans ce cas vu que tu ne matches que des chiffres, tu ne risques rien. Ca donnerait :

$chaine = preg_replace('/toto(\d+)/e', 'titi[$1]', $chaine);

Je ne suis plus sûr s'il faut un return ou un point virgule, j'ai un doute; à toi d'essayer.
Bonjour,

Pour ma part, un simple preg_match, avec un if.


preg_match('/toto(\d.+)/i', $str, $match);

if ($match && $match[1])
echo $tab[$match[1]]);


En gros.
Code non testé Smiley cligne
Salut les copaings, merci pour vos réponses !

@ Nyleor :
Testé et approuvé, je vais utiliser cette fonction ! Il faut juste que je lui passe mon tableau en plus du tableau des références :

$ma_chaine = preg_replace_callback('#Toto([0-9]+)#',
             function($m)use($mon_tableau) {
                return "<span>J'ai trouvé  Toto".$m[1]." : ".$mon_tableau[$m[1]]."</span>;";
             },
             $ma_chaine};


@ QuentinC :
Testé et approuvé ! L'utilisation de l'option "e" étant dépréciée, je vais donc me tourner vers preg_replace_callback, mais merci Smiley cligne

@ totopsy :
Ça me semble étrange, Je ne vois pas trop en quoi cela peut me permettre de changer les morceaux de ma chaine qui m’intéressent ^^
Modifié par The_Moye (10 Mar 2014 - 12:36)
Bien vu, il n'y avais que la détection ><

Désolé. Avec un str_replace / preg_replace après, cela fonctionnais.

Ceci dit, ca fonctionne, c'est le principal