php正则preg_replace_callback崩溃
sshong 发表于2013年2月20日 21:06:52 更新于2013年2月20日 21:08:38
有一篇日志不能显示,觉得很奇怪,调试出来发现是php正则崩溃了。

如何知道正则崩溃了?
$content = preg_replace_callback(xxx);
//如果返回null,说明崩溃了
if(is_null($content)) {
    //打印错误码
    echo preg_last_error();
}
我这边错误码是2,原来是回溯次数太多,归根结底是正则表达式非贪婪模式导致的效率陷阱,改正则表达式解决。

错误码如下:

PREG_NO_ERROR 0
没有匹配错误时调用preg_last_error()返回. php 5.2.0可用.

PREG_INTERNAL_ERROR 1
如果有PCRE内部错误时调用preg_last_error()返回. php 5.2.0可用.

PREG_BACKTRACK_LIMIT_ERROR 2
如果调用回溯限制超出, 调用preg_last_error()时返回. php 5.2.0可用.

PREG_RECURSION_LIMIT_ERROR 3
如果递归限制超出, 调用preg_last_error()时返回. php 5.2.0可用.

PREG_BAD_UTF8_ERROR 4
如果最后一个错误时由于异常的utf-8数据(仅在运行在 UTF-8 模式正则表达式下可用.) 导致的, 调用preg_last_error()返回. php 5.2.0可用.

PREG_BAD_UTF8_OFFSET_ERROR 5
如果偏移量与合法的urf-8代码不匹配(仅在运行在 UTF-8 模式正则表达式下可用.). 调用preg_last_error()返回. php 5.2.0可用.
标签:正则分类:PHP阅读:2899
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅