Retourner aux forums || Retourner au forum Programmation.perl
Programmation.perl : Expressions regulière
Posté par eMerzh (Jabber id, page perso, ) le 20 février 2006Je cherche à remplacer tout les espaces contenu entre 2 quotes.
par exemple j'ai une chaine a='hello "every body".linux "is great"'
après le remplacement avec un %20 par exemple, cette chaine devrai etre :
'hello "every%20body".linux "is%20great"'
> Lire le message (4 commentaires, moyenne: 2).
je dirais...
($b = $a) =~ s/"([^"]*)\s([^"]*)"/$1%20$2/g;
voila
-
[^]Re: je dirais...
Posté par eMerzh (Jabber id, page perso, ) le 20/02/2006 à 10:05. (lien). Évalué à 1.wip , merci beaucoup :)
j'y suis presque ... mais c'est pas encor tout à fais ok....
quand je fait :
$line='Hello "world co" "brol and "';
($b = $line) =~ s/("[^"]*)\s([^"]*")/$1%20$2/g;
print $b."\n";
il me donne :
Hello "world%20co" "brol and%20"
pourquoi il remplace pas l'espace avant "and"...-
[^]Re: je dirais...
Posté par alenvers () le 20/02/2006 à 14:39. (lien). Évalué à 2.>pourquoi il remplace pas l'espace avant "and"...
Parce que l'expression ne match qu'un seul espace entre les guillemets.
Je propose
echo 'Hello "world co" "brol and "' | perl -ne 'print join("\"",map { s/ /\%20/g if ($i++ % 2); $_ } split(/"/))'
Ou encore
echo 'Hello "world co" "brol and "' | perl -ne 's/("[^"]*\s[^"]*")/{$t=$1; $t =~ s# #%20#g; $t}/ge; print'
-
-
[^]Re: je dirais...
Posté par LeSeb (page perso, ) le 20/02/2006 à 18:36. (lien). Évalué à 1.Comme on dit en Perl, "il y a plus d'une façon de le faire", voici la mienne.
Certainement pas la plus efficace, mais elle a le mérite de fonctionner ...
my $chaine = 'hello "world co" "brol and " youpi';
foreach my $avant ( $chaine =~ m/"(.*?\s+.*?)"/g )
{
my $apres = $avant;
$apres =~ s/\s/%20/g;
$chaine =~ s/$avant/$apres/;
}
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.perl



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.