【问题标题】:How can I profile Perl regexes?如何分析 Perl 正则表达式?
【发布时间】:2009-01-06 04:33:14
【问题描述】:

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

【问题讨论】:

    标签: regex perl profiling


    【解决方案1】:

    Perl 带有Benchmark 模块,它可以获取大量代码样本,并回答“哪个更快?”的问题。我在Benchmarking Basics 上有一个Perl Tip,虽然它本身不使用正则表达式,但它确实提供了对该主题的快速而有用的介绍,以及进一步的参考。

    brian d foy 在他的 Mastering Perl 书中也有一个关于基准测试的优秀章节。他很友善地提供了chapter on-line as a draft,非常值得一读。我真的不能推荐它。

    保罗

    【讨论】:

    • 除了 Benchmarking 和 Profiling 章节,查看 regex 章节了解一些工具。
    • perl -Mre=debug / 使用 re 'debug';
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        相关资源
        最近更新 更多