在PHP PCRE RegEx中计算子模式

时间:2011-09-01 10:09:57

标签: php python regex pcre

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

re.compile(regex).groups

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

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

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

问题的后半部分is a dupe

答案 1 :(得分:1)

preg正则表达式没有内省--pcre有一个函数(pcre_fullinfo)但是由于某些原因,php开发人员并没有费心为它提供粘合剂。您可以考虑在bugs.php.net上为此提交功能请求。

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

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