正则表达式执行时间分析

6 regex performance execution-time

由于糟糕的语法和不明显的细节,一些正则表达式的执行时间呈指数级增长。有没有什么通用的方法可以分析和学习某个正则表达式是否具有线性或指数执行时间?

Sob*_*que 4

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

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

没有硬性规定 - 我寻找的一个重要警告信号是这个正则表达式是否需要回溯。请参阅:灾难性回溯

当您使用前瞻/后瞻(但不是必须)时,这种情况会更容易发生。

但从长远来看,值得记住的是,虽然正则表达式是一种编程语言,但它的出发点是作为一种强大的搜索和替换功能。因此,在其中实现复杂的逻辑意味着您正在创建难以维护和调试的代码 - 所以您不应该这样做。

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

因此,您可以启用正则表达式调试,然后执行“sed style”:

perl -pe 's/search/replace' somefile
Run Code Online (Sandbox Code Playgroud)

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

perl -Mre=debug -pe 's/search/replace/' somefile
Run Code Online (Sandbox Code Playgroud)

这会在你去的时候调试它。

  • 灾难性的回溯是最严重的罪魁祸首——小心嵌套量词。 (2认同)