2

perl 负面展望不适用于大字符串(长度 > 40000,在活动 perl 和 cygwin perl 版本 5.14 中)。我尝试了相同的代码,mingw perl 5.8.8但它停止处理长度> 5000的字符串。

我正在使用的代码是:

my $str = q(A  B);
my $pattern = '(A)(?:(?!(X)).)*(B)';  
if ( $str =~ m/$pattern/ ) {
    print "matched\n";
}

这适用于所有三个版本的 perl。但是当我通过添加空格来增加字符串的长度时,模式会停止匹配。

例如:my $str = q(A ...some 50000 spaces... B);

请帮忙。

4

1 回答 1

5

Perl 对各种正则表达式操作的大小施加了内部限制(在大多数系统上可能是有符号的 16 位整数)以限制堆栈增长。 这个答案很好地分解了限制。

从经验测试来看,当空间数达到 32767 时,就是你失败的时候,所以肯定是这个限制。

于 2013-02-08T06:01:36.487 回答