代码之家  ›  专栏  ›  技术社区  ›  Josh Davis

PHP中是否有正则表达式优化器?

  •  2
  • Josh Davis  · 技术社区  · 16 年前

    珀尔有 Regexp::Optimizer ,PHP中是否有类似的内容?我的搜索没有找到任何结果。

    例如,regexp::optimizer将

    /foobar|fooxar|foozap/
    

    进入之内

    /foo(?:[bx]ar|zap)/
    

    更新 我想把这个问题保持得很简短,这样人们就不会试图过度解释它,但事实证明它产生了相反的效果。我正在寻找一个采用正则表达式并输出功能等效但更有效的正则表达式的东西。我在Perl中发现了这样的东西,但在PHP中没有,我想知道这样的东西是否存在。在这方面,我希望有一个“是/否”的回答,如果适用,还附带一个链接。谢谢,很抱歉弄混了。

    4 回复  |  直到 15 年前
        1
  •  1
  •   nathan    16 年前

    不(阿法克),但是做 ctype functions 用于基本检查人们经常使用regex的位置。

        2
  •  1
  •   mario    16 年前

    由于PCRE支持Perl语法,所以只需使用Perl模块。PHP中有一个扩展可以立即调用Perl代码。但您可以执行它并缓存结果,除非您需要“实时”转换:

     $re = exec('perl -M"Regexp::Optimizer" -e 'print Regexp::Optimizer->new->optimize(qr'.escapeshellcmd($re).')';
    
        3
  •  1
  •   tsgrasser    16 年前

    您可以将s选项传递给regex,该regex将在第一次编译期间对其进行研究(此后将缓存regex,直到脚本死亡)。

    http://php.net/manual/en/reference.pcre.pattern.modifiers.php

    这在掌握正则表达式Ed.3的PHP一章中非常详细,在您给出的特定示例中,它将以一种有用的方式进行优化。

    编辑: 实际上,在考虑了更多之后,它甚至不需要S选项,因为PCRE将自己优化那个特定的示例。一个更好的例子是只寻找几个开始的字符,比如

    /foobar|barfoo|helloworld/S
    

    因为它只是从[fbh]开始

        4
  •  0
  •   Josh Davis    15 年前

    因此,到2010年12月1日为止,没有通用的PHP正则表达式优化器。