正则expression式的最坏情况分析

是否有任何工具会采用特定的正则expression式,并根据正则expression式所匹配的特定字符数所需的操作数返回最差的情况?

例如,给定一个(f|a)oo.*[ ]baz ,引擎可能通过多less个步骤来匹配100个字符?

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

我意识到这将取决于所使用的引擎和实现 – 但我不知道这是多么普遍。 所以,如果它是很多语言的常见(使我的问题太模糊),我会特别感兴趣的Perl和Python。

Regexbuddy的debugging器显示了引擎在给定的样本上采用多less步来完成匹配。 有关灾难性回溯和debugging正则expression式的更多信息。

在RegexBuddy中显示灾难性的回溯

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

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

你可能会得到你想要的东西,像使用re.compile re.DEBUG 。 请参阅Python隐藏特性社区wiki的优秀答案 ,以获得广泛的解释。