在 perl 中编译正则表达式时出现“reg_node overrun”
Posted
技术标签:
【中文标题】在 perl 中编译正则表达式时出现“reg_node overrun”【英文标题】:"reg_node overrun" when compiling regular expressions in perl 【发布时间】:2013-10-07 03:07:54 【问题描述】:我正在尝试运行一个定义一些(复杂)正则表达式的脚本:https://github.com/wo/opp-tools/blob/master/rules/Keywords.pm。每当我包含此模块时,Perl 都会崩溃并显示消息“恐慌:reg_node overrun 试图在 rules/Keywords.pm 第 60 行发出 51”。这是 Ubuntu 12.04 上的 Perl v5.14.2。任何可能导致此问题的想法将不胜感激。
更新:这是导致问题的 sn-p。
use strict;
use warnings;
use utf8;
my $re_address_word = qr/\b(?:
universit|center|centre|institute?|sciences?|college|research|
avenue|street|philosophy|professor|address|department|
umass
)\b/ix;
our $re_publication_word = qr/\b(?:
forthcoming|editors?|edited|publish\w*|press|volume
to\sappear\sin|draft|editor\w*|reprints?|excerpt|
circulation|cite
)\b/ix;
my $re_notitle = qr/
$re_address_word |
$re_publication_word |
\b(?:thanks?|
@|
[12]\d3|
abstract
)/ix;
our $re_title = qr/^
(?!.*$re_notitle?.*)
\pIsAlpha
/x;
【问题讨论】:
您能发布导致问题的正则表达式吗?以防万一github中的行号与您的行号不同。 我将您的模块包含在脚本中,没有错误。您能否与我们分享更多信息? 请包含一个演示问题的小示例脚本。不要链接到可能会过时的外部内容。 :) 好的。我添加了一个示例脚本。在这里,我得到“恐慌:reg_node overrun 试图在 test.pl 第 26 行发出 46”。第 26 行是“我们的 $re_title = qr/^”。 您添加的代码 sn-p 不包括所说的 Keywords.pm。此外,它编译和运行没有任何错误! 【参考方案1】:我今天在编译由多个表达式组成的正则表达式时遇到了同样的问题。下面的示例说明了产生问题的代码:
my $cities = qr/(Foo1|Foo2|FooBarss)/;
## Solution change ss -> s[s]
## my $cities = qr/(Foo1|Foo2|FooBars[s])/;
my $street = qr/(foo|bar|baz)/;
$text =~ /$street \s+ $cities/;
解决方案是用 s[s] 替换文字 ss,它看起来很随机,我无法挖掘引用来支持它,但它对我有用。
【讨论】:
以上是关于在 perl 中编译正则表达式时出现“reg_node overrun”的主要内容,如果未能解决你的问题,请参考以下文章
在 JavaScript 正则表达式中使用 1+ 所有格量词时出现正则表达式错误
PatternSyntaxException:在 Java 中使用正则表达式时出现非法重复