使用此正则表达式:
preg_replace( '/<!--(?!<!)[^\[>].*?-->/', '', $output )
我可以从我的页面中删除所有 HTML 注释,除了以下内容:
<!--[if IE 6]>
Special instructions for IE 6 here
<![endif]-->
如何修改此设置以排除包含唯一短语(例如“batcache”)的 HTML 注释?
因此,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 )
最佳答案
这应该替换所有不包含“batcache”的注释。匹配是在这两个标签之间完成的:<!--
至-->
.
$result = preg_replace("/<!--((?!batcache)(?!\\[endif\\])[\\s\\S])*?-->/", "", $str);
你可以测试一下here .
正如其他用户已经指出的那样,使用正则表达式解析 HTML 并不总是安全的,但如果您对要解析的 HTML 类型有相对的保证,那么它应该按预期工作。如果正则表达式与某些特定用例不匹配,请告诉我。
关于php - 使用正则表达式删除几乎所有 HTML 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463265/