Шаблон в игре соответствует сбалансированным фигурным скобкам с помощью рекурсии регулярных выражений. Сам шаблон выглядит отлично и работает как предназначен .
<?php
$re = '/{(?>[^{}]|(?R))*\}/m';
$str = 'Why is preg_match_all not working?{{{{{
$pattern = \'/\\{(?:[^{}]|(?R))*\\}/\';
$result = 161240 characters
if (preg_match_all($pattern, $result, $matches)){ {
echo \'Success\';
} else {
echo \'Not working\';
}
}}}}}}{}{}{}{}{}{}{}{{{{{{}}}}}';
//preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
if (preg_match_all($re, $str, $matches)) {
echo 'Success\n';
} else {
echo 'Not working\n';
}
// Print the entire match result
var_dump($matches);
Это также работает с большим вводом (здесь проверено с ~ 5000 символов).
Наиболее вероятное объяснение: шаблон не находит правильного соответствия.
Однако вы используете рекурсивное регулярное выражение для очень большой входной строки. Многие вещи могут пойти не так. Механизм PCRE достигает внутренних пределов, ваша строка не закодирована должным образом, время ожидания и т. Д.