PHP 正则表达式函数

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!