【发布时间】:2015-02-11 19:53:38
【问题描述】:
使用这个正则表达式:
preg_replace( '/<!--(?!<!)[^\[>].*?-->/', '', $output )
我可以从我的页面中删除所有 HTML cmets,除了如下所示的内容:
<!--[if IE 6]>
Special instructions for IE 6 here
<![endif]-->
如何修改它以排除包含唯一短语(例如“batcache”)的 HTML cmets?
所以,一个 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 )
【问题讨论】:
-
你为什么不使用
strip_tags?并添加回特殊的条件 cmets? -
不要使用正则表达式解析 HTML。使用适当的 HTML 解析模块。 您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。请参阅htmlparsing.com/php 或this SO thread,了解如何使用已经编写、测试和调试过的 PHP 模块正确解析 HTML。
标签: php html regex html-parsing conditional-comments