2017-10-20 4 views
0

Im 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. 

は、なぜこれが動作しませんか?

EDIT:**演算子を一般量指定子として使用し、その後に範囲を使用しようとしています。私はそれが{range min、range max} quantifierと同等であると読んでいます

+4

「**」はここで何を意味しますか? –

+1

一致させる文字列は何ですか? – Barmar

+2

あなたはPerlとPerl6を混乱させるようです。 '** {0..7}'はPerl6文法のように見えます。 – melpomene

答えて

0

リテラル文字列以外の文字列を "**"とマッチさせていない場合、それをエスケープする必要があります。

/($np) (?: $s+ (?: [\w-]+ | ($np))) \*\* {0..$window_size}/
関連する問題