用于多行HTML注释的正则表达式(preg_match_all)

时间:2010-04-06 12:19:10

标签: php html regex comments

我有一个包含多个注释掉的PHP数组的html文档,例如:

<!-- Array
(
[key] => 0
)
-->

使用PHP,我需要以某种方式解析HTML仅用于这些注释(还有其他需要忽略的注释)并提取内容。我一直在尝试使用preg_match_all,但我的正则表达能力并不高。有人能指出我正确的方向吗?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

如何使用允许您访问评论的HTML Parser(例如Simple HTML DOM),然后使用strpos检查新评论的每条评论。

$html = str_get_html('...HTML HERE...');
$comments = $html->find('comment');
foreach ( $comments as $comment ){
    if ( strpos($comment, "\n") !== false ){
        //process comment
    }
}

答案 1 :(得分:2)

这里有三个事实

  1. HTML文档中没有地方可以显示文字“<!--”而表示评论(其他任何地方都会将其转义为“&amp;!-- “)
  2. 您似乎不想更改文档内容,只查找其中的位(搜索和替换很可能会破坏文档,单独搜索没有)
  3. 评论无法在HTML中嵌套(与普通HTML标记相反) - 这会产生重大影响
  4. 上述组合意味着(lo和behold)正则表达式可以用于识别HTML注释。

    试试这个正则表达式:<!-- Array([\s\S])*?-->。匹配组1将包含"Array"之后的所有内容,直至注释的结束序列。

    您可以对找到的位进行进一步的健全性检查,以确保它们实际上是您正在寻找的。

答案 2 :(得分:-2)