使用正则表达式和php删除除Internet Explorer注释之外的所有html注释

时间:2011-05-03 11:45:39

标签: php regex html

我是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;
}
?>

请帮助。

3 个答案:

答案 0 :(得分:9)

为什么不使用否定前瞻来确保评论不以[if开头?这更容易阅读,评论也可以包含[]

<!--(?!\[if).*?-->

See here online

更新:前瞻断言是一个非捕获(零长度)表达式(就像检查单词边界的achor \ b),这意味着它不会消耗字符,它会检查表达式是否匹配,如果是它继续在表达之前的角色之后。否定的是检查下面没有表达式。我最好链接到手册,这里是PerlReTut。应该在那时与php没什么区别。

答案 1 :(得分:1)

如果您知道页面上没有HTML注释使用[和]字符,if条件除外,您可以使用:

preg_replace("/<!--([^\[\]]*)-->/", "", $text);

答案 2 :(得分:0)

试试这个 \<!--[\(\.\|\\\w\)\*\?\d\-\+\}\{]+-->

enter image description here