perl负面向前看不到大字符串

时间:2013-02-08 05:42:54

标签: perl negative-lookahead

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);

请帮助。

1 个答案:

答案 0 :(得分:5)

Perl对各种正则表达式操作的大小施加了内部限制(在大多数系统上恰好是带符号的16位整数)以限制堆栈增长。 This answer有一个非常好的限制细分。

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