使用此正则表达式:
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 )
答案 0 :(得分:1)
这应取代不包含&#34; batcache&#34;的评论。匹配在这两个标记之间完成:<!--
到-->
。
$result = preg_replace("/<!--((?!batcache)(?!\\[endif\\])[\\s\\S])*?-->/", "", $str);
您可以对其进行测试here。
正如其他用户已经说过的那样,使用正则表达式解析HTML并不总是安全的,但如果您对要解析的HTML类型有相对的保证,它应该按预期工作。如果正则表达式与某些特定用例不匹配,请告诉我。