Ваше регулярное выражение вызывает катастрофический откат и приводит к отказу движка PHP-регулярных выражений. Вы можете использовать preg_last_error()
функцию , чтобы проверить это.
$r = preg_replace("/\[\](\s|.)*\]/s", "", $s);
if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
print 'Backtrack limit was exhausted!';
}
Выход:
Backtrack limit was exhausted!
Вы получаете NULL
возвращаемое значение из preg_replace
из-за этой ошибки. Согласно PHP документ preg_replace
:
Если совпадения найдены, новая тема будет возвращена, в противном случае тема будет возвращена без изменений или NULL, если произошла ошибка .
Исправлено: Вам не нужно (\s|.)
при использовании модификатора s
( DOTALL ). поскольку точка соответствует любому символу, включая символ новой строки, при использовании модификатора s
.
Вы должны просто использовать это регулярное выражение:
$r = preg_replace('/\[\].*?\]/s', "", $s);
echo preg_last_error();
//=> 0