【发布时间】:2016-06-08 09:19:18
【问题描述】:
由于语法错误和不明显的细节,一些正则表达式的执行时间呈指数级增长。有没有常用的方法来分析和学习某个正则表达式的执行时间是线性的还是指数的?
【问题讨论】:
-
@uhoh,是的 - 现在我确定了
-
感谢您的警告,我现在要避免它。 ;-)
标签: regex performance execution-time
由于语法错误和不明显的细节,一些正则表达式的执行时间呈指数级增长。有没有常用的方法来分析和学习某个正则表达式的执行时间是线性的还是指数的?
【问题讨论】:
标签: regex performance execution-time
在进行正则表达式操作之前,我倾向于只使用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
这将在您进行时对其进行调试。
【讨论】: