使用Regex删除几乎所有HTML注释

时间:2015-02-11 19:53:39

标签: php html regex html-parsing conditional-comments

使用此正则表达式:

preg_replace( '/<!--(?!<!)[^\[>].*?-->/', '', $output )

我能够从我的网页中删除所有HTML评论,除非看起来像这样:

<!--[if IE 6]>
    Special instructions for IE 6 here
<![endif]-->

如何修改此选项以排除包含唯一短语的HTML评论,例如&#34; batcache&#34;?

所以,HTML评论:

<!--
generated 37 seconds ago
generated in 0.978 seconds
served from batcache in 0.004 seconds
expires in 263 seconds
-->

不会被删除。


这段代码似乎可以解决问题:

preg_replace( '/<!--([\s\S]*?)-->/', function( $c ) { return ( strpos( $c[1], '<![' ) !== false || strpos( $c[1], 'batcache' ) !== false ) ? $c[0] : ''; }, $output )

1 个答案:

答案 0 :(得分:1)

这应取代不包含&#34; batcache&#34;的评论。匹配在这两个标记之间完成:<!---->

$result = preg_replace("/<!--((?!batcache)(?!\\[endif\\])[\\s\\S])*?-->/", "", $str);

您可以对其进行测试here

正如其他用户已经说过的那样,使用正则表达式解析HTML并不总是安全的,但如果您对要解析的HTML类型有相对的保证,它应该按预期工作。如果正则表达式与某些特定用例不匹配,请告诉我。