【问题标题】:Count subpatterns in PHP PCRE RegEx在 PHP PCRE RegEx 中计算子模式
【发布时间】:2011-09-01 10:09:56
【问题描述】:

我想实现“正则表达式编辑器”之类的东西。它适用于我的 PHP 应用程序的高级用户。问题是,我需要正则表达式的“反射”之类的东西(更准确地说,对于任何给定的正则表达式)来找出它包含多少子模式。在 Python 中,我只需键入:

re.compile(regex).groups

如何在 PHP 中实现它?如果表达式甚至能够编译,那么能够安全地知道也很好。在 Python 中,会引发异常并且很容易处理它们。 PHP 在没有任何警报的情况下拍摄我的应用程序,或者产生一些无法捕获的警告/错误。

感谢您的任何建议!

【问题讨论】:

    标签: php python regex pcre


    【解决方案1】:

    preg 正则表达式没有自省 - pcre 有一个函数 (pcre_fullinfo) 但出于某种原因 php 开发人员没有费心为它提供胶水。您可以考虑在 bugs.php.net 上提交功能请求。

    检查正则表达式有效性的唯一方法是在 try-catch 块中对其进行编译,示例参见 How to check if a string is a valid PCRE?

    也就是说,我认为允许用户在您的服务器上执行任意正则表达式并不是一个好主意。一个恶意的或者只是写得不正确的表达会很快耗尽所有的记忆。

    【讨论】:

      【解决方案2】:

      我可以看到这非常困难。确定可能模式的最大数量非常复杂,因为扩展/POSIX/Perl 正则表达式非常复杂。它们嵌套,捕获一些模式意味着其他模式不会,依此类推。我不知道有什么方法可以直接在 PHP 中确定模式的最大数量,自己解决基本上相当于重新实现整个引擎,这非常复杂;我怀疑我们大多数人都使用了一半。

      问题的后半部分is a dupe

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 2013-07-01
        • 2019-02-16
        • 2021-11-26
        • 1970-01-01
        • 2012-02-12
        • 2021-03-28
        • 2011-07-14
        • 2016-09-25
        相关资源
        最近更新 更多