PHP preg_last_error() 函数返回最后一次 PCRE 正则表达式执行的错误代码。
语法
preg_last_error()
参数
不需要参数。
返回值
返回以下常量之一:
常量 | 描述 |
---|---|
PREG_NO_ERROR | 没有错误。 |
PREG_INTERNAL_ERROR | 存在内部 PCRE 错误。 |
PREG_BACKTRACK_LIMIT_ERROR | 回溯限制已用完。 |
PREG_RECURSION_LIMIT_ERROR | 递归限制已用尽。 |
PREG_BAD_UTF8_ERROR | 最后一个错误是由格式错误的 UTF-8 数据引起的(仅当在 UTF-8 模式下运行正则表达式时) . |
PREG_BAD_UTF8_OFFSET_ERROR | 偏移量与有效 UTF-8 代码点的开头不对应(仅当以 UTF-8 运行正则表达式时) |
PREG_JIT_STACKLIMIT_ERROR | 由于 JIT 堆栈空间有限,最后一个 PCRE 函数失败。 |
示例:preg_last_error() 示例
下面的示例显示了 preg_last_error() 函数的用法。
<?php
$string = 'May 25, 2005';
//无效模式 - 缺少结束分隔符
$pattern = '/May';
$match = @preg_match($pattern, $string, $matches);
if($match === false) {
//发生错误 - 获取最后一个错误
$err = preg_last_error();
if($err == PREG_INTERNAL_ERROR) {
echo 'Invalid regular expression.';
}
} else if($match) {
//找到匹配项
echo $matches[0];
} else {
//未找到匹配项
echo 'No matches found';
}
?>
上述代码的输出将是:
Invalid regular expression.
示例:回溯限制耗尽
再考虑一个示例,其中此函数为用于获取最后一个 PCRE 正则表达式执行错误,即回溯限制耗尽。
<?php
preg_match('/(?:\D+|)*[!?]/', 'foobar foobar foobar');
if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
echo 'Backtrack limit was exhausted!';
}
?>
上述代码的输出将是:
Backtrack limit was exhausted!