2017-10-20 75 views
0

我是一個Perl noob,我一直在試圖開發一個簡單的腳本來從正則表達式中捕獲一些值。到目前爲止,我已經建立了以下程序:Perl中的錯誤:正則表達式中的嵌套量詞

#!/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"); 
    } 
} 

然而,當我嘗試運行這段代碼,它讓我看到以下錯誤:

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. 

這是爲什麼不工作?

編輯:我試圖使用**運算符作爲一般量詞,後面是一個範圍。我已經讀過,它相當於{範圍最小,範圍最大}量詞

+4

你想在這裏表示什麼'**'? –

+1

你試圖匹配什麼字符串? – Barmar

+2

你似乎混淆了Perl和Perl6。 '** {0..7}'看起來像Perl6語法所要做的。 – melpomene

回答

0

如果您不是將字符串以外的任何內容與「**」匹配,那麼您將需要將其轉義。

/($np) (?: $s+ (?: [\w-]+ | ($np))) \*\* {0..$window_size}/