Supposons que je scanne une page de code HTML brut à la recherche de cette expression régulière. (Le guillemet à la fin est intentionnel).
m/(https?:\/\/.*?(?:'|"))/
Ce modèle est susceptible de correspondre à environ 100 fois. Qu'est-ce qu'un idiome Perl commun/un moyen rapide de parcourir une liste de toutes les correspondances de groupe de capture?
De la perlretut (un très bon tutoriel)
while ($x =~ /(\w+)/g) {
print "Word is $1, ends at position ", pos $x, "\n";
}
Vous pouvez utiliser while
avec le modificateur g
pour parcourir toutes les correspondances, avec $1
vous obtenez le contenu de votre groupe de capture 1, et dans cet exemple du tutoriel vous obtenez également la position avec pos
.
Le modificateur de correspondance globale "g
" renvoie une liste des correspondances capturées dans le contexte de la liste:
say $_ for $str =~ /un($wanted)/g; # Prints only $wanted
@Zahid: Je pense que votre approche est plus compacte. j'espère que l'extrait suivant vous aidera à comprendre votre exemple
my $str = 'file_%date%_%name%_%lang%.txt';
my @ts = $str =~ /%([\w]+)%/g;# <----------Zahid said
print join(", ", @ts);
Production:
date, name, lang