我正在尝试建立一个类似于rubular的服务,但使用preg系列函数将PHP作为语言。它将使用输入正则表达式,测试字符串并运行preg_match()
。
我如何找出是否发生了编译错误(例如:无效的正则表达式),如果是这种情况,错误是什么?通常,它会发出如下警告:
Warning: preg_match() [function.preg-match]: Compilation failed: missing ) at offset x in ****** on line y
此处
pcre_last_error()
完全没有用,因为如果正则表达式无法编译,它将返回0(PREG_NO_ERROR
)。我正在考虑的一种选择是使用输出缓冲来捕获警告,但是必须有一种更好的方法。
最佳答案
最好的办法是使用@
忽略错误消息,检查返回值,如果是false
,则调用 error_get_last
。
您还可以围绕 pcre_compile
编写自己的包装器。它接收用于存储错误代码和字符串的指针。应该不会太困难; preg_match
是一个瘦包装器。