Я мигрирую старую кодовую базу в новую базу данных, которая находится в UTF-8. Я также использую Eloquent, поэтому мне больше не нужно беспокоиться о внедрении SQL.
После преобразования всего содержимого базы данных в UTF-8 и удаления HTML-сущностей мне нужно удалить каждый вызов htmlentities. Итак, я написал это:
htmlentities\s*\(
(?<e>[^()]*(?:\((?&e)\)[^()]*?)*)
(?:,\s*ENT_\w+)?
(?:\s*\,'UTF-8')?
\)
https://regex101.com/r/2RpH3L/2
Мое регулярное выражение слишком жадное и работает не так, как ожидалось. Например:
htmlentities(foobar(), ENT_QUOTE, 'UTF-8');
^--------------------------^ Match this
^------^ Instead of this
Я мог бы выполнить эту работу в два этапа с помощью Perl:
perl -pi -e '\
s/htmlentities\s*\((?<e>[^()]*(?:\((?&e)\)[^()]*?)*)\)/\
s@^(.*?)(?:,\s*(?:ENT_\w+|'UTF-8')\s*)*$@$1@\
/gme
Есть ли способ сделать это простым PCRE?