捕获正则表达式编译错误

Nul*_*ion 7 php regex

我正在尝试建立类似于rubular的服务,但使用PHP作为使用preg系列函数的语言.它将采用输入正则表达式,测试字符串和运行preg_match().

如何确定是否发生了编译错误(例如:无效的正则表达式),如果是这种情况,那么错误是什么?通常会发出如下警告:

Warning: preg_match() [function.preg-match]: Compilation failed: missing ) at offset x in ****** on line y
Run Code Online (Sandbox Code Playgroud)

pcre_last_error()这里完全没用,因为PREG_NO_ERROR如果正则表达式无法编译,它将返回0().

我正在考虑的一个选择是使用输出缓冲捕获警告,但必须有一个更好的方法.

Art*_*cto 2

您能做的最好的事情就是使用 忽略错误消息@,检查返回值,如果是false,则调用error_get_last

您还可以编写自己的包装器pcre_compile。它接收用于存储错误代码和字符串的指针。应该不会太难;preg_match是一个薄包装纸。