如何在标签之间获取大文本

时间:2013-07-02 08:41:34

标签: php regex curl

我正在使用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。 任何想法可能是什么原因?我想得到这个标签之间的所有内容(包括空格,其他标签)

1 个答案:

答案 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;
}