expression reguliere

darkloy
Invité n'ayant pas de compte PHPfrance

29 avr. 2009, 11:21

Bonjour à tous !
J'ai un problème, des insertions en BDD avec des variables de template du type : {VARIABLE} .Le problème c'est que certaines sont inséré avec des antislash ex : \{VARIABLE\}

Je fait un script php pour corriger ça.
Je ne suis pas un pro en expression régulière, mais j'essaye de me battre ...

Je récupère le contenu .
Ex : 'blablabla bla bla bla bla \{hello\} blabla'

j'aimerais le remplacer comme ca:
Ex : 'blablabla bla bla bla bla {hello} blabla'

j'ai fait ca :

Code : Tout sélectionner

// On récupère le contenu $content = $v[contenu]; // Expression régulière $regex = '\{.{0,10}\}'; // On cherche le type \{AAAAAAA\} et on remplace $newContent= ereg_replace($regex,$content) [\code] Forcement c'est tout fait . Si quelqu'un pourrais m'aider et m'expliquer un peu, ca serais très gentil, car je bloque complètement la .... Merci

D4Y
Eléphant du PHP | 52 Messages

29 avr. 2009, 11:30

Salut , je suis loin d'être un spécialiste des regex mais ton code m'interpèle tout de même :
// On récupère le contenu
   $content = $v[contenu];
   // Expression régulière
   $regex = '\{.{0,10}\}'; // {0,10)
   // On cherche le type \{AAAAAAA\} et on remplace
   $newContent= ereg_replace($regex,$content) //Problème avec ereg_replace

string ereg_replace ( string $pattern , string $replacement , string $string )

je pense qu'il te manque le string $remplacement

darkloy
Invité n'ayant pas de compte PHPfrance

29 avr. 2009, 11:47

Salut D4Y!

Tu as raison mais le problème, c'est que ma valeur de remplacement va écraser tout le temps ma variable .

Code : Tout sélectionner

// On récupère le contenu $content = $v[contenu]; // Expression régulière $regex = '\{.{0,10}\}'; // {0,10) // On cherche le type \{AAAAAAA\} et on remplace $replace = '{toto}'; $newContent= ereg_replace($regex,$replace,$content) //Problème avec ereg_replace
ca va donner pour 'blabla bla \{hello\} bla bla'
-> 'blabla bla {toto} bla bla'
alors que je veux
-> 'blabla bla {hello} bla bla'


Je pense que je vais faire comme ca :
rechercher si il y'as un chaine du type {blabla}
Si oui je la récupère, je l'extrait, et je change (str_replace) les '\{' par '{' et les '\}' par '{'
Ensuite je fait un str_replace de cette valeur corrigé dans le contenu initial

Je teste et je vous tiens au courant

[/code]

Eléphant du PHP | 217 Messages

29 avr. 2009, 12:29

Bonjour,
il faut eviter les ereg_* et préferer les preg_ qui sont plus vélocent comme regexp.

Voici un petit bout de code permettant d'arriver au résultat escompté :
<?php
$str = 'blabla bla \{hello\} bla bla blah blah \{toto\} blah blah';
$str2 = preg_replace('`\\\{([^\\\]+)\\\}`','{\\1}',$str);

echo 'Chaine normale : '.$str.'<br />';
echo 'Chaine remplacement : '.$str2;
?>