正则expression式的最坏情况分析
是否有任何工具会采用特定的正则expression式,并根据正则expression式所匹配的特定字符数所需的操作数返回最差的情况?
例如,给定一个(f|a)oo.*[ ]baz
,引擎可能通过多less个步骤来匹配100个字符?
如果有一个工具,可以采取一堆文本样本,并显示每个运行的平均操作,我也会感兴趣。
我意识到这将取决于所使用的引擎和实现 – 但我不知道这是多么普遍。 所以,如果它是很多语言的常见(使我的问题太模糊),我会特别感兴趣的Perl和Python。
Regexbuddy的debugging器显示了引擎在给定的样本上采用多less步来完成匹配。 有关灾难性回溯和debugging正则expression式的更多信息。
PS:这是不是免费的,但他们提供了3个月的退款保证。
请注意,这取决于引擎 。 虽然正则expression式理论是基于直线自动机理论的,但大多数的引擎并不是对这些理论的严格翻译。 出于这个原因,例如,一些引擎在指数时间发生,而严格的NFA处理则不会。
你可能会得到你想要的东西,像使用re.compile
re.DEBUG
。 请参阅Python隐藏特性社区wiki的优秀答案 ,以获得广泛的解释。