php5.2开始,正则已经可以使用preg_last_error()函数来返回最后一次PCRE正则执行的错误代码.
使用此函数可以方便我们调试PHP的正则语句,写成一个函数。上码:
function preg_error() {
$error_code = preg_last_error();
switch ($error_code) {
case PREG_NO_ERROR :
echo 'PREG_NO_ERROR';
echo '没有匹配错误';
break;
case PREG_INTERNAL_ERROR:
echo 'PREG_INTERNAL_ERROR';
echo 'PCRE内部错误';
break;
case PREG_BACKTRACK_LIMIT_ERROR:
echo 'PREG_BACKTRACK_LIMIT_ERROR';
echo '调用回溯限制超出';
break;
case PREG_RECURSION_LIMIT_ERROR:
echo 'PREG_RECURSION_LIMIT_ERROR';
echo '递归限制超出';
break;
case PREG_BAD_UTF8_ERROR:
echo 'PREG_BAD_UTF8_ERROR';
echo '异常的utf-8数据';
break;
case PREG_BAD_UTF8_OFFSET_ERROR:
echo 'PREG_BAD_UTF8_OFFSET_ERROR';
echo '偏移量与合法的urf-8代码不匹配';
break;
default:
echo 'UNKNOW ERROR';
echo '未知错误';
}
}
//以下为测试内容
preg_match('/(?:\D+|)*[!?]/', 'foobar foobar foobar');
preg_error();
echo '
';
preg_match('/foobar/', 'foobar foobar foobar');
preg_error();
?>
结果:
PREG_BACKTRACK_LIMIT_ERROR调用回溯限制超出
PREG_NO_ERROR没有匹配错误
end