从其他站点获取数据时的简单正则表达式

时间:2012-07-22 05:14:55

标签: php regex

  • 我想从网址到我的网站获得第一篇帖子内容。这是我需要的网址:

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

  • 所以我用firebug来做。我需要在这个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标签以及带有类的表标签= tborder(这个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标签之间的内容。那么,我该怎么办?

1 个答案:

答案 0 :(得分: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);