©
本文档使用 PHP中文网手册 发布
(PHP 5 >= 5.2.0)
preg_last_error — 返回最后一个PCRE正则执行产生的错误代码
返回最后一次PCRE正则执行的错误代码。
Example #1 preg_last_error() 示例
<?php
preg_match ( '/(?:\D+|<\d+>)*[!?]/' , 'foobar foobar foobar' );
if ( preg_last_error () == PREG_BACKTRACK_LIMIT_ERROR ) {
print 'Backtrack limit was exhausted!' ;
}
?>
以上例程会输出:
Backtrack limit was exhausted!
返回下面常量中的一个(查看它们自身的解释):
PREG_NO_ERROR
PREG_INTERNAL_ERROR
PREG_BACKTRACK_LIMIT_ERROR
(参见 pcre.backtrack_limit)PREG_RECURSION_LIMIT_ERROR
(参见 pcre.recursion_limit)PREG_BAD_UTF8_ERROR
PREG_BAD_UTF8_OFFSET_ERROR
(自 PHP 5.3.0 起)[#1] gk at anuary dot com [2014-01-11 14:21:18]
In PHP 5.5 and above, getting the error message is as simple as:
<?php
echo array_flip(get_defined_constants(true)['pcre'])[preg_last_error()];
[#2] andre at koethur dot de [2013-06-23 09:00:43]
Just an addition to my previous note: In unicode mode (with "u" modifier), PREG_BAD_UTF8_ERROR only reflects errors in the subject string. If the pattern itself contains invalid characters, preg_match() (or preg_match_all()) returns false but preg_last_error() returns 0 indicating PREG_NO_ERROR. Instead, php issues a warning: "preg_match(): Compilation failed: invalid UTF-8 string at offset 0"
[#3] andre at koethur dot de [2013-06-18 12:37:13]
Here is a more advanced function to convert an error code to text:
<?php
function preg_errtxt($errcode)
{
static $errtext;
if (!isset($errtxt))
{
$errtext = array();
$constants = get_defined_constants(true);
foreach ($constants['pcre'] as $c => $n) if (preg_match('/_ERROR$/', $c)) $errtext[$n] = $c;
}
return array_key_exists($errcode, $errtext)? $errtext[$errcode] : NULL;
}
?>
[#4] Omer [2011-02-12 09:22:17]
here's the code to check for all errors
<?php
if (preg_last_error() == PREG_NO_ERROR) {
print 'There is no error.';
}
else if (preg_last_error() == PREG_INTERNAL_ERROR) {
print 'There is an internal error!';
}
else if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
print 'Backtrack limit was exhausted!';
}
else if (preg_last_error() == PREG_RECURSION_LIMIT_ERROR) {
print 'Recursion limit was exhausted!';
}
else if (preg_last_error() == PREG_BAD_UTF8_ERROR) {
print 'Bad UTF8 error!';
}
else if (preg_last_error() == PREG_BAD_UTF8_ERROR) {
print 'Bad UTF8 offset error!';
}
?>
[#5] johan at bluemoonit dot net [2010-05-24 05:20:24]
The above function pcre_error_deocde [sic] is not correct - not all of the used constants are errors constants. For example, when the error is actually PREG_BAD_UTF8_ERROR, the function outputs the text for PREG_SPLIT_OFFSET_CAPTURE.