2012-07-05 81 views
3

我试图去除嵌入HTML文件如何删除HTML注释在PHP

$data= file_get_contents($stream); <br> 
$data = preg_replace('<!--*-->', '', $data); <br> 
echo $data; 

我仍然与所有的评论<结束了任何意见! - 唧唧歪歪 - >
什么我做错了吗?

+0

在右侧看到这些链接>> [正则表达式的 – 2012-07-05 02:56:15

+0

可能重复,以去除HTML评论](http://stackoverflow.com/questions/1084741/regexp-to-strip-html-comments) – xdazz

回答

0
  1. 正则表达式很难牵扯到你想要做的事情。

  2. 要匹配正则表达式中的任意文本,您需要.*,而不仅仅是*。您的表情正在寻找<!-,之后是零个或多个-个字符,然后是-->

+0

我的目标html有多行评论..一行评论工作正常...我如何修复多行注释? –

+0

你实际上需要'。*?'来尽可能少的匹配,否则你会从第一个'<! - '到最后一个' - >'这个不是你想要的东西。 –

0

s/<!--[^>]*?-->//g

交换机最多的正则表达式

+0

你实际上需要'[^>] *?'尽可能少地匹配,否则你会从第一个'<! - '到最后一个' - >'这个不是你想要的东西。 –

2

下面的正则表达式会删除HTML注释,但将保留条件注释。

<!--(?!<!)[^\[>].*?--> 
+0

'strip_tags'去除所有标签,而不仅仅是注释。 –

+0

@NedBatchelder,感谢您的建议,我快速读了这个问题,并没有关注这个问题。我做了一个编辑。 –

+0

'strip_tags'总是去掉评论,但你可以指定去掉WHAT标签。指定不在HTML中的东西,并且仅剥下注释。 – ghoti

-2

你应该做的是这样的:

$str = "<html><!-- this is a commment -->OK</html>"; 
$str2 = preg_replace('/<!--.*-->/s', '', $str); 
var_dump($str2); 
+1

我是用文件解析一个页面获取内容......用这段代码我仍然以最后所有的评论 –

+1

反斜杠太多,没有足够的懒惰的明星。 – ghoti

+0

编辑(删除反斜杠),我试过(在我的情况下)它的作品。 –

2

你可以做到这一点,而无需使用正则表达式:

function strip_comments($html) 
{ 
    $html = str_replace(array("\r\n<!--", "\n<!--"), "<!--", $html); 
    while(($pos = strpos($html, "<!--")) !== false) 
    { 
     if(($_pos = strpos($html, "-->", $pos)) === false) 
      $html = substr($html, 0, $pos); 
     else 
      $html = substr($html, 0, $pos) . substr($html, $_pos+3); 
    } 
    return $html; 
}