(PHP 5 >= 5.2.0)

preg_last_errorВозвращает код ошибки выполнения последнего регулярного выражения PCRE


int preg_last_error ( void )

Возвращает код ошибки выполнения последнего регулярного выражения PCRE.

Пример #1 Пример использования preg_last_error()


('/(?:\D+|<\d+>)*[!?]/''foobar foobar foobar');

if (
preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
'Был исчерпан лимит обратных ссылок!';


Результат выполнения данного примера:

Был исчерпан лимит обратных ссылок!

Возвращаемые значения

Возвращает одну из следующих констант, (описанных на отдельной странице.):

  • PREG_BACKTRACK_LIMIT_ERROR (см. также pcre.backtrack_limit)
  • PREG_RECURSION_LIMIT_ERROR (см. также pcre.recursion_limit)
  • PREG_BAD_UTF8_OFFSET_ERROR (начиная с PHP 5.3.0)


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.
2010-05-24 08:20:24
Here is a more advanced function to convert an error code to text:


function preg_errtxt($errcode)

    if (!isset(
$errtext = array();
$constants get_defined_constants(true);
        foreach (
$constants['pcre'] as $c => $n) if (preg_match('/_ERROR$/'$c)) $errtext[$n] = $c;

array_key_exists($errcode$errtext)? $errtext[$errcode] : NULL;

2013-06-18 15:37:13
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"
2013-06-23 12:00:43
In PHP 5.5 and above, getting the error message is as simple as:

echo array_flip(get_defined_constants(true)['pcre'])[preg_last_error()];
2014-01-11 16:21:18
Take it into account before use this function.

My php --version
PHP 5.6.29 (cli) (built: Dec  8 2016 09:19:46) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

On Linux Fedora 23 4.8.13-100.fc23.x86_64 #1 SMP Fri Dec 9 14:51:40 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

// @see

// returns true because  there is no opening "(" for the closing ")"
var_dump(preg_match('~InvalidRegular)Expression~'null) === false);

// this SHOULD be something different from 0, but...
2017-02-25 01:03:23

    Поддержать сайт на родительском проекте КГБ