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标签之间的内容。那么,我该怎么办?
答案 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);