Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Remplacement de clés par leurs valeurs dans une chaine

3 réponses
Avatar
GuiGui
Bonjour,

Je cherche à faire du remplacement clé/valeur dans une chaîne multiligne.

J'ai un tableau associatif :

%Assoc = ( "cle1" => "chaine", "cle2" => "repartie", "cle3" => "lignes" );


Et une chaîne multiligne :

$str = "Ceci est une #cle1# qui\nest #cle2# sur\nplusieurs #cle3#\n";


Je veux obtenir pour str la valeur :
"Ceci est une chaine qui\nest repartie sur\nplusieurs lignes\n"

Est-il possible de faire du remplacement via des regexp en utilisant des
variables ? Y a-t-il une autre méthode ?


Merci.

3 réponses

Avatar
Thomas vO
bonjour,

À (at) Mon, 30 Jun 2008 12:51:58 +0200,
GuiGui nous disait (told us):
Je cherche à faire du remplacement clé/valeur dans une chaà ®ne multiligne.

J'ai un tableau associatif :

%Assoc = ( "cle1" => "chaine", "cle2" => "repartie", "cle3" => "l ignes" );


Et une chaîne multiligne :

$str = "Ceci est une #cle1# quinest #cle2# surnplusieurs #cle3#n";


Je veux obtenir pour str la valeur :
"Ceci est une chaine quinest repartie surnplusieurs lignesn"

Est-il possible de faire du remplacement via des regexp en utilisant des
variables ? Y a-t-il une autre méthode ?



a priori , oui... un truc du genre :

$str =~ s/#(w*)#/$Assoc{$1}/g;

devrait fonctionner.

--
Thomas vO - <http://perso.enstimac.fr/~vanouden/>
Avatar
Paul Gaborit
À (at) Mon, 30 Jun 2008 12:52:31 +0200,
Thomas vO <vanouden+ écrivait (wrote):
bonjour,

À (at) Mon, 30 Jun 2008 12:51:58 +0200,
GuiGui nous disait (told us):
Je cherche à faire du remplacement clé/valeur dans une chaîne multiligne.

J'ai un tableau associatif :

%Assoc = ( "cle1" => "chaine", "cle2" => "repartie", "cle3" => "lignes" );


Et une chaîne multiligne :

$str = "Ceci est une #cle1# quinest #cle2# surnplusieurs #cle3#n";


Je veux obtenir pour str la valeur :
"Ceci est une chaine quinest repartie surnplusieurs lignesn"

Est-il possible de faire du remplacement via des regexp en utilisant des
variables ? Y a-t-il une autre méthode ?



a priori , oui... un truc du genre :

$str =~ s/#(w*)#/$Assoc{$1}/g;

devrait fonctionner.



Il manque le modificateur /e pour que $Assoc{$1} soit évalué :

$str =~ s/#(w*)#/$Assoc{$1}/ge;


Je propose aussi de traiter les clés inexistantes ou indéfinies :

$str =~ s/#(w*)#/(defined $Assoc{$1}?$Assoc{$1}:"#$1#")/ge;

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
Avatar
GuiGui
Paul Gaborit a écrit :
À (at) Mon, 30 Jun 2008 12:52:31 +0200,
Thomas vO <vanouden+ écrivait (wrote):
bonjour,

À (at) Mon, 30 Jun 2008 12:51:58 +0200,
GuiGui nous disait (told us):
Je cherche à faire du remplacement clé/valeur dans une chaîne multiligne.

J'ai un tableau associatif :

%Assoc = ( "cle1" => "chaine", "cle2" => "repartie", "cle3" => "lignes" );


Et une chaîne multiligne :

$str = "Ceci est une #cle1# quinest #cle2# surnplusieurs #cle3#n";


Je veux obtenir pour str la valeur :
"Ceci est une chaine quinest repartie surnplusieurs lignesn"

Est-il possible de faire du remplacement via des regexp en utilisant des
variables ? Y a-t-il une autre méthode ?


a priori , oui... un truc du genre :

$str =~ s/#(w*)#/$Assoc{$1}/g;

devrait fonctionner.



Il manque le modificateur /e pour que $Assoc{$1} soit évalué :

$str =~ s/#(w*)#/$Assoc{$1}/ge;


Je propose aussi de traiter les clés inexistantes ou indéfinies :

$str =~ s/#(w*)#/(defined $Assoc{$1}?$Assoc{$1}:"#$1#")/ge;




Merci à tous les 2

:-)