在PHP中进行HTML注释爬取

3

我一直在寻找解决方法,但是至今未能成功。我正在尝试抓取HTML文档并获取两个注释之间的文本,但是到目前为止没有成功。

我正在使用PHP,并已经多次尝试了此处推荐的PHP Simple DOM解析器,但似乎无法达到我的要求。

这是我想要解析的页面(部分内容):

<div class="class">
  <!-- blah -->
    text
  <!-- end blah -->

  Text I want

  <!-- blah -->
    text
  <!-- end blah -->
</div>

谢谢


你能展示一下你现在的代码吗? - Randell
2个回答

4
假设每个评论都不同(即第一和第二部分的“blah”不同),您可以使用一些简单的 strpos 来获取它们之间的所有内容。不需要使用正则表达式。
$startStr = '<!-- end blah1 -->';
$endStr = '<!-- start blah2 -->';

$startPos = strpos($HTML, $startStr) + strlen($startStr);
$endPos = strpos($HTML, $endStr );

$textYouWant = substr($HTML, $startPos, $endPos-$startPos);

如果这两组注释是相同的,那么你需要修改它以查找第二个“blah”,使用 strposoffset 参数。

3
也许你可以使用正则表达式?
$text = '
<div class="class">
  <!-- blah -->
    text
  <!-- end blah -->

  Text I want

  <!-- blah -->
    text
  <!-- end blah -->
</div>
';

$regex = '/(<!-- end blah -->)(.*?)(<!-- blah -->)/ims';
$match = preg_match_all ($regex, $text, $matches);

25
必须的“现在你有两个问题”的评论 ;) - DisgruntledGoat
13
每次你试图使用正则表达式解析HTML时,不祥的孩子就会哭泣处女的血。 - Jon Winstanley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接