[Perl] Problème regexp en Perl
Marc Chantreux
khatar at phear.org
Mar 19 Sep 21:54:06 CEST 2017
salut Dominique,
> my $text = "+abcd";
> if( $text =~ m/\+/ ) {
> $text =~ s/$&//;
> }
> print( $text.$/ );
pourquoi chercher le motif une premiere fois ? si c'est parceque tu veux
faire qqchose quand la substitution a lieu, tu peux simplement compter
sur le fait qu'elle renvoie un booléen
for ( "+abcd ) { say "substitution il y a" if s/^\+// }
ensuite ... utiliser $& dans une substitution (donc avec une
regexp) en esperant que $& est bien l'ancien $& ... si tu vois le pb?
> Bien évidemment il serait facile d'écrire la chose autrement mais ici
> c'est un ECM comme on dit et dans mon cas la regexp est évidemment
> plus complexe.
ben si tu nous montres, on aura pe de meilleures approches à te propser.
> Comment faire en sorte que le contenu de $& soit pris comme tel et non comme une regexp ?
dans une regexp, tu peux faire du litteral entre un \Q et un \E donc
pour rester proche de ton exemple:
my $text = "+abcd";
my ($matched) = $text =~ /(\+)/;
length $matched and $text =~ s/\Q$$matched//;
print $text;
une autre approche serait de se servir de //g pour positionner le
curseur sur ta chaine. tu peux alors te déplacer petit à petit:
use v5.24;
my $text = "+abcd";
$text =~ /(\+)/g;
say "
matched: '$1'
current position: ${\(pos $text )}
remaining text : ${\(substr $text, (pos $text) )}
";
cordialement,
marc
--
Marc Chantreux (eiro on github and freenode)
http://eiro.github.com/
http://eiro.github.com/atom.xml
"Don't believe everything you read on the Internet"
-- Abraham Lincoln
Plus d'informations sur la liste de diffusion Perl