顺序(?正则表达式中不完整 - 负面看法

时间:2012-06-21 04:07:45

标签: regex perl

我在使用Jeffrey Friedl的着作Mastering Regular Expressions 3rd Ed的“负面环视”代码运行我的perl脚本时遇到以下错误。 (第167页)。任何人都可以帮我吗??

错误消息:

序列(?正则表达式中不完整;标记为< - HERE in m /         (                                  (                         (?< - HERE / at /home/wubin28/mastering_regex_cn/p167.pl第13行。

我的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";
}

1 个答案:

答案 0 :(得分: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";
}