0
  • 我想从 url 获取第一个帖子内容到我的网站。这是我需要获取的网址:

http://www.vietvbb.vn/up/forumdisplay.php?f=15

  • 所以我用萤火虫来做。我需要在这个 html 代码之间获取第一个帖子内容:

    <td id="td_post_11229294" class="alt1" style="border-right: 0px solid #262626"><--content that i need--></td>
    
  • 我这样做了:

        $url = 'http://www.vietvbb.vn/up/showthread.php?t=65690';
    $data = file_get_contents($url);
    preg_match('/<td class="alt1" id="td_post_(.*?)">\r\n(.*?)\r\n<\/td>/s', $data, $tc);echo '<pre>';print_r($tc);echo '</pre>';
    
  • 但正如您所见,它不仅返回了我在 td 标签中真正需要的内容,它还为我提供了 td 标签中的第一个内容帖子和一个 id=postmenu_xxx 的 div 标签和一个 class=tborder 的 table 标签(这个 div 和 table,他们是我不需要的东西)

    <div id="postmenu_11229294_menu" class="vbmenu_popup" style="display:none">.....</div>
    <table class="tborder" cellspacing="0" cellpadding="3" border="0" align="center" width="100%">....</table>
    
  • 我只希望它在上面的 td 标记之间返回我的内容。那么,我该怎么办?

4

1 回答 1

0

你的 preg_match 可能需要这样的东西:

preg_match("/<td id=\"td_post_\d+[^>]+>([^<]+)<\/td>/",$var,$between);

它寻找一个 id 为 td_post_ 加上 1 个或多个数字的开始 td 标签,然后匹配 1 个或多个非结束标签字符,然后开始捕获非开始标签字符。

以上将适用于简单的情况(它假设在 td 标签中没有嵌入其他标签)。如果您需要更复杂的东西,您可能应该使用可以正确解析 DOM 的模块,而不是尝试重新发明轮子。

编辑:听起来您尝试解析的内容格式不正确(来自您的错误消息),但这不应阻止您获得所需的内容。例如,JQuery 具有强大的 DOM 解析功能,可以让您抓取该 td 标记内的内容。

也就是说,你总是可以尝试一个不太具体的正则表达式,如下所示,但同样,不能替代适当的解析器:

preg_match("/<td id=\"td_post_\d+[^>]+>(.+?)<\/td>/",$var,$between);
于 2012-07-22T05:30:33.890 回答