[Perl] Problème regexp en Perl

Dominique Asselineau asseline at telecom-paristech.fr
Mer 20 Sep 13:01:20 CEST 2017


Bonjour,

Marc Chantreux wrote on Tue, Sep 19, 2017 at 09:54:06PM +0200
> 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

Oui mais comme dit précédemment, c'était un ECM pour mettre facilement
en évidence ce qui me posait problème.  En fiat, avant de remplacer,
en l'occurrence supprimer le motif « matché », je voulais récupérer des
composants de ce motif, d'où la raison de s'y prendre en 2 opérations.

La solution proposée dans un autre mail par Paul Gaborit répond
exactement à mon besoin.

Merci à vous deux.

Dominique


> 
> 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
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl

-- 


Plus d'informations sur la liste de diffusion Perl