【发布时间】:2011-02-04 19:06:38
【问题描述】:
我有一个带有多个注释掉的 PHP 数组的 html 文档,例如:
<!-- Array
(
[key] => 0
)
-->
使用 PHP,我需要以某种方式仅解析这些 cmets 的 HTML(还有其他需要忽略的 cmets)并提取内容。我一直在尝试使用preg_match_all,但我的正则表达式技能并不高。谁能指出我正确的方向?
非常感谢任何帮助!
【问题讨论】:
我有一个带有多个注释掉的 PHP 数组的 html 文档,例如:
<!-- Array
(
[key] => 0
)
-->
使用 PHP,我需要以某种方式仅解析这些 cmets 的 HTML(还有其他需要忽略的 cmets)并提取内容。我一直在尝试使用preg_match_all,但我的正则表达式技能并不高。谁能指出我正确的方向?
非常感谢任何帮助!
【问题讨论】:
三个事实在这里发挥作用
<!--”并且不是表示注释(在其他任何地方都将转义为“&amp;!--”)李>
上述组合意味着(你瞧)正则表达式可以用于识别 HTML cmets。
试试这个正则表达式:<!-- Array([\s\S])*?-->。匹配组 1 将包含 "Array" 之后的所有内容,直到评论的结束序列。
您可以对找到的位进行进一步的完整性检查,以确保它们确实是您正在寻找的。p>
【讨论】:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <title>Comments where you don't expect</title> <h1>Comments where you don't expect</h1> <!-- This is a comment --> <div> <img src="http://sstatic.net/so/img/logo.png" alt="<!-- this is just alt text"> </div>
< 的地方……呃……容忍)。但我承认它可能发生在某个地方,当然您需要知道它是否会发生在您的数据中。
preg_replace("/\d/", "", $s),但仍然是错误,因为它必须是 preg_replace("/\\d/", "", $s);`。正确的转义是关键。
【讨论】:
如何使用允许您访问 cmets 的 HTML 解析器(例如 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
}
}
【讨论】: