我正在将旧的代码库迁移到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中做到这一点?