【问题标题】:Regex execution time analysis正则表达式执行时间分析
【发布时间】:2016-06-08 09:19:18
【问题描述】:

由于语法错误和不明显的细节,一些正则表达式的执行时间呈指数级增长。有没有常用的方法来分析和学习某个正则表达式的执行时间是线性的还是指数的?

【问题讨论】:

  • 显然是Regex is evil
  • @uhoh,是的 - 现在我确定了
  • 感谢您的警告,我现在要避免它。 ;-)

标签: regex performance execution-time


【解决方案1】:

在进行正则表达式操作之前,我倾向于只使用perl 并打开use re 'debug';

这会打印正则表达式处理的步骤,并快速给出效率的概念。

没有硬性规定——我寻找的主要警告信号是这个正则表达式是否需要回溯。见:Catastrophic Backtracking

当您使用前瞻/后瞻(但并非必须)时,这可能更多很容易发生。

不过,从总体上看 - 值得记住的是,虽然 regex 是一种编程语言,但它的 起点 是一种强大的搜索和替换。因此在其中实现复杂的逻辑意味着您正在创建难以维护和调试的代码 - 所以您不应该这样做。

perl 中的一个有用技巧 - 它可以使用命令行以与 sed/grep/awk 大致相同的方式运行。

所以你可以启用正则表达式调试,然后做'sed style':

perl -pe 's/search/replace' somefile

但是你可以添加“调试”正则表达式:

perl -Mre=debug -pe 's/search/replace/' somefile

这将在您进行时对其进行调试。

【讨论】:

  • 灾难性回溯是最严重的违规行为 - 谨防嵌套量词。
  • 我想我刚刚找到了使用 Perl 的理由 :)
猜你喜欢
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多