J'ai du code qui saisit le "entre" d'un texte; spécifiquement, entre un foo $someword
et le suivant foo $someword
.Pourquoi mon regex Perl provoque-t-il une boucle infinie?
Cependant, ce qui se passe est qu'il se bloque au premier "entre" et en quelque sorte la position de la chaîne interne ne s'incrémente pas. Les données d'entrée sont un fichier texte avec des sauts de ligne ici et là: ils sont plutôt hors de propos, mais facilitent l'impression.
my $component = qr'foo (\w+?)\s*?{';
while($text =~ /$component/sg)
{
push @baz, $1; #grab the $someword
}
my $list = join("|", @baz);
my $re = qr/$list/; #create a list of $somewords
#Try to grab everything between the foo $somewords;
# or if there's no $foo someword, grab what's left.
while($text=~/($re)(.+?)foo ($re|\z|\Z)/ms)
#if I take out s, it doesn't repeat, but nothing gets grabbed.
{
# print pos($text), "\n"; #this is undef...that's a clue I'm certain.
print $1, ":", $2; #prints the someword and what was grabbed.
print "\n", '-' x 20, "\n";
}
Vous ne voulez pas un «/g "modificateur dans la deuxième boucle aussi? – jrockway
\ z et \ Z ne sont pas nécessaires, \ Z contient \ z –
Je marche dans le texte, ne saisissant pas un tableau (qui est ce que g retournerait). Cependant,/g n'affecte pas le problème de sortie finale. J'ai essayé. :-) –