分析Perl正则表达式以确定它们有多贵的最佳方法是什么?

有帮助吗?

解决方案

Perl附带基准模块,可以获取大量代码示例,并回答“哪一个更快?”的问题。我在 Perl提示 /tips/2007-07-04.html“rel =”noreferrer“>基准测试基础知识,虽然它本身不使用正则表达式,但它确实提供了对该主题的快速有用的介绍,以及进一步的引用。

brian d foy在他的掌握Perl的基准测试中也有优秀的章节书。他非常友好地将章节在线作为草稿,这非常值得一读。我真的不能推荐它。

其他提示

只是说“使用基准”但是,模块并没有真正回答这个问题。对正则表达式进行基准测试不同于对计算进行基准测试;你需要大量的真实数据,所以你可以像真实数据那样强调正则表达式。如果您的大部分数据都匹配,那么您需要一个快速匹配的正则表达式;如果大多数都会失败,你想要一个快速失败的正则表达式。他们可能会成为同一个正则表达式,但也许不是。

我首选的方法是向RE提供大量输入数据,然后处理该数据N次(例如100,000次)以查看需要多长时间。

然后调整RE并重试(将所有旧的RE保留为注释,以防将来需要再次对它们进行基准测试,谁知道Perl 7中可能会出现什么奇妙的优化?)。

可能有一些工具可以分析RE来为特定输入提供执行路径(比如DBMS中的分析工具)但是,因为Perl是懒惰的语言(Larry自己传达的诫命),我无法去找它: - )。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top