Intereting Posts
Должен ли CodeIgniter загружать представление на последнем этапе? Как я могу использовать библиотеку ACL CodeIgniter? Скопируйте все содержимое каталога в другое, используя php Опубликовать многомерный массив с использованием CURL и получить результат на сервере Нельзя использовать объект типа PDOStatement как массив php больше определенного времени Могу ли я получить поддержку интеграции Sagepay Server inFrame В чем разница между добавками PHP и mysql (i) _escape_string? [PHP Предупреждение: mail (): «sendmail_from» не установлен в php.ini или пользовательский заголовок «From:» отсутствует Неустранимая ошибка: вызов функции-члена fetch_array () для не-объекта в Инъекция зависимостей Laravel в промежуточном программном обеспечении Страница пользовательских ошибок PHP Необходимость просмотра офисных документов MS в системе управления документами на базе php Как узнать, недействителен ли адрес электронной почты? Невозможно использовать имя столбца переменной PHP для обновления столбца в SQL

PHP: неожиданный PREG_BACKTRACK_LIMIT_ERROR

function recursiveSplit($string, $layer) { $err = preg_match_all("/\{(([^{}]*|(?R))*)\}/",$string,$matches); echo "Elementi trovati: $err<br>"; if($err == FALSE) echo "preg_match_all ERROR<br>"; // iterate thru matches and continue recursive split if (count($matches) > 1) { for ($i = 0; $i < count($matches[1]); $i++) { if (is_string($matches[1][$i])) { if (strlen($matches[1][$i]) > 0) { echo "<pre>Layer ".$layer.": ".$matches[1][$i]."</pre><br />"; recursiveSplit($matches[1][$i], $layer + 1); } } } } } $buffer = "{aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{aaaaaaaaaaaaaaaaaa{aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}"; recursiveSplit($buffer, 0); 

вывод

 Elementi trovati: preg_match_all ERROR Backtrack limit was exhausted! 

этот код дает мне ошибку PREG_BACKTRACK_LIMIT_ERROR … но предел обратного пути равен 100.000.000.

Это мой первый раз с регулярным выражением, и я действительно не знаю, как его решить.

Большое спасибо, Марко

Еще один классический случай катастрофического отступления . Должно быть, сегодня мой счастливый день .

 /\{(([^{}]*|(?R))*)\}/ 

только соответствует, если фигурные скобки правильно вложены. Которые они не являются, конечно, в вашей строке.

Теперь проблема заключается в том, что вашему регулярному выражению нужно выяснить все возможные комбинации строк, которые вы можете построить с помощью 106 a с, чтобы понять это, потому что у вас есть вложенные кванторы ((...)*)*) . Который (поправьте меня, если я ошибаюсь) должен быть где-то в районе 106! который приходит

114628056373470835453434738414834942870388487424139673389282723476762012382449946252660360871841673476016298287096435143747350528228224302506311680000000000000000000000000

который легко бьет ваш PREG_BACKTRACK_LIMIT.

Если вы используете притяжательные квантификаторы, чтобы убедиться, что вы никогда не вернетесь в фигурные скобки, которые вы уже сопоставили, тогда вы должны быть в порядке:

 /\{(([^{}]*+|(?R))*)\}/