【问题标题】:Worst Case Analysis for Regular Expressions正则表达式的最坏情况分析
【发布时间】:2011-06-11 11:50:38
【问题描述】:

是否有任何工具可以采用特定的正则表达式并返回与正则表达式匹配的特定数量的字符所需的操作数相关的最坏情况?

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

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

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

【问题讨论】:

  • 好问题!显然这将取决于正则表达式。众所周知,纯正则表达式(甚至像下面引用的 (x+x+)+y 示例)承认纯有限状态机自动机,但常见的正则表达式库实际上实现了带有回溯的那些,在很大程度上是为了支持像上下文这样的花哨的东西。像您描述的工具将非常适合捕捉en.wikipedia.org/wiki/…

标签: python regex perl optimization analysis


【解决方案1】:

Regexbuddy's 调试器显示引擎将采取多少步骤来结束给定样本的匹配或不匹配。有关catastrophic backtrackingdebugging regular expressions 的更多信息。

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

【讨论】:

【解决方案2】:

请注意,这取决于引擎。虽然正则表达式理论基于直接自动机理论,但大多数引擎都不是这些理论的严格翻译。出于这个原因,例如,某些引擎会产生指数时间,而严格的 NFA 处理则不会。

【讨论】:

    【解决方案3】:

    你可能会得到你想要的东西,比如使用re.compilere.DEBUG。请参阅 Python Hidden Features 社区 wiki 中的 excellent answer 以获取详细说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多