Python 正则表达式的最坏情况分析

Python 正则表达式的最坏情况分析,python,regex,perl,optimization,analysis,Python,Regex,Perl,Optimization,Analysis,是否有任何工具可以接受特定的正则表达式并返回最坏的情况,即正则表达式所匹配的特定数量的字符所需的操作数 例如,给定一个(f | a)oo.[]baz,引擎可能要经过多少步骤才能匹配100个字符 我也很感兴趣,如果有一个工具,可以采取一堆文本样本,并显示每个运行的平均操作 我意识到这在很大程度上取决于所使用的引擎和实现——但我不知道这有多普遍。所以,如果它在许多语言中都很常见(使我的问题过于模糊),我会对Perl和Python特别感兴趣。debugger显示了引擎在给定示例上判断匹配与否需要多少步

是否有任何工具可以接受特定的正则表达式并返回最坏的情况,即正则表达式所匹配的特定数量的字符所需的操作数

例如,给定一个
(f | a)oo.[]baz
,引擎可能要经过多少步骤才能匹配100个字符

我也很感兴趣,如果有一个工具,可以采取一堆文本样本,并显示每个运行的平均操作

我意识到这在很大程度上取决于所使用的引擎和实现——但我不知道这有多普遍。所以,如果它在许多语言中都很常见(使我的问题过于模糊),我会对Perl和Python特别感兴趣。

debugger显示了引擎在给定示例上判断匹配与否需要多少步骤。更多关于和的信息


PS:这不是免费的,但他们提供3个月的退款保证。

注意,这取决于发动机。虽然正则表达式理论是基于直接自动机理论,但大多数引擎并不是这些理论的严格翻译。例如,由于这个原因,一些引擎会在指数时间内发生错误,而严格的NFA处理则不会。

您可能会得到您想要的东西,比如使用
re.compile
re.DEBUG
。有关详细说明,请参见社区wiki

好问题!显然,这将取决于正则表达式。众所周知,纯正则表达式(甚至像下面引用的
(x+x+)+y
示例)允许使用纯有限状态机自动机,但普通正则表达式库实际上实现了那些具有回溯功能的自动机,这在很大程度上是为了支持上下文之类的奇特内容。像你描述的那样的工具会很好地捕捉我正在玩的东西——杰夫一直是它的粉丝:。但我想的是更程序化一点,面向优化——如果这有意义的话。