分析Perl正则表达式以确定它们有多贵的最佳方法是什么?
答案 0 :(得分:13)
Perl附带Benchmark模块,可以获取大量代码示例,并回答“哪一个更快?”的问题。我在Perl Tip上有一个Benchmarking Basics,虽然它本身不使用正则表达式,但它确实提供了对该主题的快速有用的介绍,以及进一步的参考。
brian d foy在他的Mastering Perl书中也有关于基准测试的优秀章节。他非常友好地提出chapter on-line as a draft,这非常值得一读。我真的不能推荐它。
保
答案 1 :(得分:3)
但是,只是说“使用基准”模块并没有真正回答这个问题。对正则表达式进行基准测试不同于对计算进行基准测试;你需要大量的真实数据,所以你可以像真实数据那样强调正则表达式。如果您的大部分数据都匹配,那么您需要一个快速匹配的正则表达式;如果大多数都会失败,你想要一个快速失败的正则表达式。他们可能会成为同一个正则表达式,但也许不是。
答案 2 :(得分:0)
我首选的方法是向RE提供大量输入数据,然后处理该数据N次(例如100,000次)以查看需要多长时间。
然后调整RE并重试(将所有旧的RE保留为注释,以防将来需要再次对它们进行基准测试,谁知道Perl 7中可能会出现什么奇妙的优化?)。
可能有一些工具可以分析RE来为特定输入提供执行路径(比如DBMS中的分析工具)但是,因为Perl是懒惰的语言(Larry自己传达的诫命),我无法去找它: - )。