Ich bin ein Perl noob und ich habe versucht, ein einfaches Skript zu entwickeln, um einige Werte aus einer Regex zu erfassen. Bisher habe ich folgendes Programm aufgebaut:Fehler in Perl: Verschachtelte Quantifizierer in 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");
}
}
Allerdings, wenn ich versuche, diesen Code auszuführen, es zeigt mir folgende Fehlermeldung:
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.
Warum ist das nicht?
EDIT: Ich versuche, den Operator **
als den allgemeinen Quantifizierer zu verwenden, gefolgt von einem Bereich. Ich habe gelesen, dass es entspricht {Bereich min, Bereich max} Quantifizierer
Was willst du '**' hier bedeuten? –
Was ist die Zeichenfolge, die Sie abgleichen möchten? – Barmar
Sie scheinen Perl und Perl6 zu verwirren. '** {0..7}' sieht aus wie etwas, was Perl6-Grammatiken tun würden. – melpomene