我是regex的新手,但需要一个能删除所有HTML注释(<!-- here -->
)但不需要删除Internet浏览器注释(<!--[if IE 7]> here <![endif]-->
)的代码。我有这个代码:
369
<?php
function stripTags($text, $tags)
{
// replace the internet explorer comments tags so they do not get stripped
$text = preg_replace("<!--[if IE7] (.*?) <![endif]-->", "#?#", $text);
// replace all the normal html comments
$text =preg_replace('/<!--(.|\n)*?-->/g', '', $&text);
// return internet explorer comments tags to their origial place
$text = preg_replace("@#\?#@", "<!--[if IE7] (.*?) <![endif]-->", $text);
return $text;
}
?>
请帮助。
答案 0 :(得分:9)
为什么不使用否定前瞻来确保评论不以[if
开头?这更容易阅读,评论也可以包含[
和]
。
<!--(?!\[if).*?-->
更新:前瞻断言是一个非捕获(零长度)表达式(就像检查单词边界的achor \ b),这意味着它不会消耗字符,它会检查表达式是否匹配,如果是它继续在表达之前的角色之后。否定的是检查下面没有表达式。我最好链接到手册,这里是PerlReTut。应该在那时与php没什么区别。
答案 1 :(得分:1)
如果您知道页面上没有HTML注释使用[和]字符,if条件除外,您可以使用:
preg_replace("/<!--([^\[\]]*)-->/", "", $text);
答案 2 :(得分:0)
\<!--[\(\.\|\\\w\)\*\?\d\-\+\}\{]+-->