Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/08/2006, 14h57   #1
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
Par défaut Preg_Replace et Array

Bonjour,

J'ai un petit problème avec la fonction preg_replace. En effet, je souhaiterai remplacer {lang:une_valeur} par la valeur de : $lang_vars['une_valeur']. (tout est dans une fonction qui elle même est dans une classe...)

Voici ce que j'ai fait (suite a la consultation d'un tutoriel sur un forum...) :
Code :
$new_object = preg_replace ( "/\{lang:(.*)\}/" , "\$lang_vars['//1']}" , $object );
Mais cela me retourne "$lang_vars['une_valeur'] et non la valeur. Mais si j'enlève l'anti-slash j'ai cette erreur :

Citation:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING'
Pouvez-vous m'aider ?

Amicalement,
nico.
Nico_57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2006, 15h15   #2
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 55
Points : 55
Bonjour Nico,

Je connais preg_replace mais je pense que tu peux essayer ca:

Code :
$new_object = preg_replace ( "/\{lang:(.*)\}/".$lang_vars['//1'].$object);
J'espère que ca t'aidera
Attilius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2006, 15h17   #3
Membre habitué
 
Inscription : mai 2004
Messages : 208
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 208
Points : 104
Points : 104
Envoyer un message via AIM à Romalafrite Envoyer un message via MSN à Romalafrite
moi je pense que ça vient du //1 ==> \\1 ?
Romalafrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2006, 18h32   #4
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
Hello,

Citation:
moi je pense que ça vient du //1 ==> \\1 ?
Je viens d'essayer : toujours le même résultat

Citation:
Bonjour Nico,

Je connais preg_replace mais je pense que tu peux essayer ca:

Code :
$new_object = preg_replace ( "/\{lang:(.*)\}/".$lang_vars['//1'].$object);
J'espère que ca t'aidera
J'ai essayé cette commande (en remplacant les . par des , ) et cela me renvoie l'erreur suivante :

Citation:
Notice: Undefined index: \1
Nico_57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2006, 19h14   #5
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
J'ai trouvé une solution, je la poste ici, ca pourra peut etre aider quelqu'un d'autre :

J'ai créé une fonction qui retournera le mot désiré .

Citation:
$new_object = preg_replace ( "#\{lang.*)\}#ies" , "\$this->get_word('\\1')" , $object );
Nico_57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2006, 21h09   #6
Invité régulier
 
Inscription : juin 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 12
Points : 5
Points : 5
Re-Bonjour,

En fait, cela ne fonctionne pas tout a fait. En effet, ce regex me prend le premier { et se termine à la fin de ma chaine (et non au } suivant.). Pouvez-vous m'aider ?

Merci d'avance.
Nico.
Nico_57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2006, 11h34   #7
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 570
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 570
Points : 2 506
Points : 2 506
Salut, pour éviter la tendance "gourmande" de ta regex, tu peux utiliser l'option de recherche U ; ça donnerait :
Code :
$new_object = preg_replace ( "#\{lang:(.*)\}#iesU" , "\$this->get_word('\\1')" , $object );
J'espère que le souci vient de là
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h53.


 
 
 
 
Partenaires

Hébergement Web