我正在尝试建立一个类似于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是一个瘦包装器。

10-06 06:40