2012-10-17 228 views
-2

可能重复,以提取特定数据:
How to parse and process HTML with PHP?如何使用的preg_match()使用PHP

问题:

仅提取第一< UL类=”使用preg_match从网页列出“> </ul>并将其转储到数组中。

代码:

$str = file_get_contents('http://www.domain.com'); 
preg_match('#<ul class="list">(.*)</ul>#i', $str, $matches); 

预期目标:

为了得到第< UL>和转储这一切在数组中。 < ul>应该是家长,里面的每个元素都应该是孩子。

回答

0

preg_match是一个字符串操作函数,对“子元素”一无所知,所以永远无法返回您希望的数组。

您需要使用能够为您解析HTML的库,例如Simple HTML DOM或内置DOM库的loadHTML method

[编辑 - “永不”上面是有点夸张:你可以,有一点努力,只是用普通preg_match写自己的微型解析器,但是比起使用这将是不灵活,难以维护HTML解析库。]

0
$str = file_get_contents('http://www.domain.com'); 
preg_match('~<ul class="list">(.*?)</ul>~si', $str, $matches); 

使用。 ?匹配第一个和最接近的结束标记。如果你使用。它会在页面上找到第一个。我假设你的UL标签是正确的。

您还需要SI标志S =单线I =不敏感
否则您的模式首先被打破\ n。

PS如果UL包含UL孩子,你应该考虑使用DOM文档DOMXPath查询解析。对于更复杂的HTML更安全。

希望它有帮助。

0

你想使用。或者如果有几个,你可以获得更多的第一个ul。

preg_match('/<ul class="list">(.+?)<\/ul>/mis', $str, $match); 

preg_match_all('/<li>(.+?)<\/li>/mis', $match[1], $lis); 

$answer = array ('ul' => $lis[1]); 

我认为这是你要找的