我正在使用cURL从网站获取部分内容。我对一行中的文本没有问题,但是如果有更多的行包含标签,空格。函数preg_match返回null 这是我的代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
$pattern = '#<div class="class-name">([^\n]+.*?)</div>#';
preg_match($pattern, $output, $matches);
var_dump($matches);
我在http://gskinner.com/RegExr/检查了这个模式,它应该可以工作,但正如我之前所说,preg_match返回null。 任何想法可能是什么原因?我想得到这个标签之间的所有内容(包括空格,其他标签)
答案 0 :(得分:2)
这是因为.*?
导致回溯,受pcre.backtrack_limit
使用DOMDocument
或任何其他HTML解析器来查找所需的数据更为明智。
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$elements = $xpath->query('//div[contains(concat(" ", @class, " "), " class-name ")]');
foreach ($elements as $element) {
echo $element->nodeValue;
}