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

Contenu supprimé Contenu ajouté
Ligne 749 :
$texte =~ /^(.{6,}?)e/;
print $1."\n"; # anticonstitutionn
</source>
= Les coulisses des regex =
== @+ et @- les @rchiveurs de regex ==
@+ matrice des fins des chaînes trouvées ($+[0] fin globale, $+[1] fin de $1 …)<p>
@- matrice des débuts des chaînes<p>
 
Les items de @+ ne se notent pas @+[0], @+[1] … mais $+[0], $+[1] … car ce sont des scalaires.
<source lang="perl">
#!/usr/bin/perl -w
use strict;
 
my $texte = "anticonstitutionnellement";
$texte =~ m/(cons....).*(nne).*(ll)/;
 
# les 3 correspondances (matchings) trouvées
print "$1 $2 $3\n" ; # constitu nne ll
 
# traces de la dernière recherche (double "l")
# anti - constitutionnell - ement
# avant - chaîne trouvée - après
print substr($texte,0,$-[0])." ".substr($texte,$-[0],$+[0]-$-[0])." ".substr($texte, $+[0])."\n";
 
# variable $2
print $-[2]." ".$+[2]."\n"; # 15 18 : début & fin de "nne"
 
# @+ matrice des fins des chaînes
print "@+\n"; # 20 12 18 20
 
# @- matrice des débuts des chaînes
print "@-\n"; # 4 4 15 18
</source>