-1

我正在使用 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 之前所说的那样。知道可能是什么原因吗?我想获取此标签之间的所有内容(包括空格、其他标签)

4

1 回答 1

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;
}
于 2013-07-02T08:47:00.683 回答