2

使用 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";
}
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 回答