php - 使用正则表达式删除几乎所有 HTML 注释

标签 php html regex html-parsing conditional-comments

使用此正则表达式:

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/

相关文章:

regex - 特定 Latex 命令中单词 *not* 的正则表达式

regex - 为什么字符范围类 [A-z] 匹配下划线?

php - 在图像上单击更改 mysql 值

php - 有 2-3% 的时间出现错误的字符编码

php - 使用单个 ID 列引用多个表

php - 通过表单将 POST 数据传递到同一页面

javascript - 自定义 Jquery UI slider 样式

html - 如何在css中的图像下添加文字说明

regex - 查找/我的音乐-type f | grep --regex ,仅通过管道传输 mp3 文件的正则表达式?

php - jQuery Ajax : pdf response