OVH Cloud OVH Cloud

Regex : substituer d'un coup $1 et $2 dans une chaîne ?

4 réponses
Avatar
ctemp1
Bonjour,

Je voudrais savoir, lorsqu'on a une chaîne de caractère, comment
substituer d'un coup plusieurs élements :

$word = "Hello world";

$word =~ "(\w+)\s(\w+)";

$word =~ s/$1/Bonjour/;

$word =~ s/$2/monde/; -> ne fonctionne pas, je suppose car la chaîne
vient d'être modifiée et ne correspond plus à l'expression.

De même :

$word = "Hello world";

$word =~ "(\w+)\s(\w+)";

$word =~ s/$1/Bonjour/;

$word =~ "\w+\s(\w+)";

$word =~ s/$1/monde/; -> ne donne rien, on dirait que c'est le $1 de
la première substitution qui est toujours actif.

Merci.

C. Tobini

4 réponses

Avatar
Marc chantreux
C. Tobini wrote:
Bonjour,

Je voudrais savoir, lorsqu'on a une chaîne de caractère, comment
substituer d'un coup plusieurs élements :

$word = "Hello world";

$word =~ "(w+)s(w+)";

$word =~ s/$1/Bonjour/;


bonjour,

peut-etre comme ca :

use strict;
use warnings;

my %a=(
hello => 'bonjour' ,
world => 'monde' ,
);

$_= "hello world";
s/(w+)/$a{$&}/g;
print;

Avatar
Denis -esp2008-
Bonsoir,

Je voudrais savoir, lorsqu'on a une chaîne de caractère,
comment substituer d'un coup plusieurs élements

$word = "Hello world";


Non testé, mais l'esprit y est:
$word =~ s/w+(s)w+/Bonjour1Monde/

Il faut stocker ce qu'on veut conserver, pas ce qu'on veut changer...

--
Denis

Avatar
dominix
"C. Tobini" a écrit dans le message de
news:
Bonjour,

Je voudrais savoir, lorsqu'on a une chaîne de caractère, comment
substituer d'un coup plusieurs élements :

$word = "Hello world";

$word =~ "(w+)s(w+)";

$word =~ s/$1/Bonjour/;

$word =~ s/$2/monde/; -> ne fonctionne pas, je suppose car la chaîne
vient d'être modifiée et ne correspond plus à l'expression.

De même :

$word = "Hello world";

$word =~ "(w+)s(w+)";

$word =~ s/$1/Bonjour/;

$word =~ "w+s(w+)";

$word =~ s/$1/monde/; -> ne donne rien, on dirait que c'est le $1 de
la première substitution qui est toujours actif.

Merci.

C. Tobini


ton exemple ne me parle pas.
si tu veux manipuler les expressions correspondante tu as:
($un, $deux) = $word =~ m/(w+)s(w+)/;

cela fonctionne car m// retourne un nombre en contexte scalaire
et une liste de ce qui est correspondant en contexte liste.

ca le fait ?

-- dominix

Avatar
C. Tobini
Bonjour à tous et merci pour vos réponses,

D'accord, j'avais vu le problème à l'envers :-)

C'est rentré dans l'ordre.

Merci encore et à +.

C. Tobini