У меня есть рекурсивное регулярное выражение для получения текста в скобках []:
preg_match_all("#\[(([^\[\]]*|(?R))*)\]#", $string, $matches);
Это работает нормально, и я без проблем использую его в PHP 5.6 и 7.0.Я обновил свой сервер до PHP 7.3, и он перестал работать для длинных текстов (длиной более 500 000 символов).
В длинном тексте, содержащем скобки, выражение возвращает все результаты с PHP 5.6 и 7.0, так как оноshould.
В PHP 7.3 он возвращает пустой массив $ match без отправки каких-либо сообщений об ошибках или предупреждений.
Я не знаю, почему это так.PCRE настроен одинаково во всех моих версиях PHP.Проблема возникает только для длинных текстов.Я не нашел упоминаний об этой проблеме в руководствах по миграции PHP.