2

Jeffrey Friedl の著書 Mastering Regular Expressions 3rd Ed の「ネガティブ ルックアラウンド」コードを使用して perl スクリプトを実行しているときに、次のエラーが発生しました。(167ページ)。誰でもそれを手伝ってもらえますか??

エラー メッセージ:

シーケンス (? 正規表現では不完全。 m/ ( ( (? <-- HERE / at /home/wubin28/mastering_regex_cn/p167.pl の 13 行目) では <-- HERE でマークされています。

私のperlスクリプト

#!/usr/bin/perl

use 5.006;
use strict;
use warnings;

my $str = "<B>Billions and <B>Zillions</B> of suns";

if ($str =~ m!
    (
        <B>
        (
            (?!<B>) ## line 13
            .
        )*?
        </B>
    )
    !x
    ) {
    print "\$1: $1\n"; #output: <B>Billions and <B>Zillions</B>
} else {
    print "not matched.\n";
}
4

1 に答える 1

5

シンボルを使用するというあなたの間違い!オープンとクローズの正規表現、および同時に負の先読み(?!。)を使用します。シンボルを{と}、または//に開いたり閉じたりするように変更した場合。正規表現は正常に評価されます。

use strict;

my $str = "<B>Billions and <B>Zillions</B> of suns";

if ($str =~ m/(<B>((?!<B>).)*?<\/B>)/x) {
    print "\$1: $1\n"; #output: <B>Billions and <B>Zillions</B>
} else {
    print "not matched.\n";
}
于 2012-06-21T04:28:36.433 に答える