« Programmation Perl/Expressions régulières » : différence entre les versions

Contenu supprimé Contenu ajouté
/* stocker une expression régulière : qr *, constructeurs spéciaux : ?= ?! ?<= ?<!/
Ligne 114 :
say "Ce n'est pas une adresse mail";
}
</source>
 
=== constructeurs spéciaux :===
==== ?= préviseur positif (positive lookahead) ====
<source lang="perl">
#!/usr/bin/perl -w
use strict;
my $texte = "anticonstitutionnellement";
 
# On cherche un "ti" qui précède ("il prévoit") "on" (suite affichée pour la clarté)
$texte =~ /(ti(?=on).+)/;#
print $1."\n"; # tionnellement
 
# un "ti" qui précède "tu"
$texte =~ /(ti(?=tu).+)/;#
print $1."\n"; # titutionnellement
 
# un "ti" qui précède "cons"
$texte =~ /(ti(?=cons).+)/;#
print $1."\n"; # ticonstitutionnellement
</source>
==== ?! préviseur négatif (negative lookahead) ====
<source lang="perl">
#!/usr/bin/perl -w
use strict;
my $texte = "anticonstitutionnellement";
 
# On cherche un "ti" qui NE précède PAS "on" (suite affichée pour la clarté)
$texte =~ /(ti(?!on).+)/;#
print $1."\n"; # ticonstitutionnellement
 
# un "ti" qui NE précède PAS "cons"
$texte =~ /(ti(?!cons).+)/;#
print $1."\n"; # titutionnellement
</source>
==== ?<= rétroviseur positif (positive lookbehind) ====
<source lang="perl">
#!/usr/bin/perl -w
use strict;
$texte = "anticonstitutionnellement";
 
# On cherche un "ti" qui suit "tu" (début affiché pour la clarté)
$texte =~ /(.+(?<=tu)ti)/;#
print $1."\n"; # anticonstituti
 
# un "ti" qui suit "cons"
$texte =~ /(.+(?<=cons)ti)/;#
print $1."\n"; # anticonsti
 
# un "ti" qui suit "an"
$texte =~ /(.+(?<=an)ti)/;#
print $1."\n"; # anti
</source>
==== ?<! rétroviseur négatif (negative lookbehind) ====
<source lang="perl">
#!/usr/bin/perl -w
use strict;
$texte = "anticonstitutionnellement";
 
# On cherche un "ti" qui NE suit PAS "tu" (début affiché pour la clarté)
$texte =~ /(.{2,}(?<!tu)ti)/;#
print $1."\n"; # anticonsti
 
# un "ti" qui NE suit PAS "an"
$texte =~ /(.{2,}(?<!an)ti)/;#
print $1."\n"; # anticonstituti
</source>