Im un perl noob et j'ai essayé de développer un script simple pour capturer certaines valeurs d'une regex. Jusqu'à présent, j'ai construit le programme suivant:Erreur dans Perl: quantificateurs imbriqués dans regex
#!/usr/bin/perl
use strict;
$/ = '';
my $PM = qr{\b[A-Z][\w-]*\w};
my $de = qr{d[aoe]s?};
my $s = qr{[\n ]};
my $np = qr{$PM (?: $s $PM | $s $de $s $PM)*}x;
my $window_size = 7;
my $window = qr{($np) (?: $s+ (\w+))*};
while(<>){
while(/($np) (?: $s+ (?: [\w-]+ | ($np))) ** {0..$window_size} /xg){
print("\$1: $1 and \$2: $2 \n");
}
}
Cependant, lorsque je tente d'exécuter ce code, il me montre l'erreur suivante:
Nested quantifiers in regex; marked by <-- HERE in m/((?^ux:(?^u:\b[A-Z][\w-]*\w) (?: (?^u:[\n ]) (?^u:\b[A-Z][\w-]*\w) | (?^u:[\n ]) (?^u:d[aoe]s?) (?^u:[\n ]) (?^u:\b[A-Z][\w-]*\w))*)) (?: (?^u:[\n ])+ (?: [\w-]+ | ((?^ux:(?^u:\b[A-Z][\w-]*\w) (?: (?^u:[\n ]) (?^u:\b[A-Z][\w-]*\w) | (?^u:[\n ]) (?^u:d[aoe]s?) (?^u:[\n ]) (?^u:\b[A-Z][\w-]*\w))*)))) ** <-- HERE {0..7}/at ./main.pl line 22, <> chunk 1.
Pourquoi ce ne fonctionne pas?
EDIT: J'essaie d'utiliser l'opérateur **
comme quantificateur général, suivi d'une plage. J'ai lu qu'il est équivalent au quantificateur {range min, range max}
Que voulez-vous dire ici par ** **? –
Quelle est la chaîne que vous essayez de faire correspondre? – Barmar
Vous semblez confondre Perl et Perl6. '** {0..7}' ressemble à ce que ferait une grammaire Perl6. – melpomene