使用PCRE从代码中删除htmlentities(。*)

时间:2019-01-14 08:29:48

标签: regex pcre

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

0 个答案:

没有答案