Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在标记之间获取大文本_Php_Regex_Curl - Fatal编程技术网

Php 如何在标记之间获取大文本

Php 如何在标记之间获取大文本,php,regex,curl,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);

我使用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);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,“example.com”);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$output=curl\u exec($ch);
卷曲关闭($ch);
$pattern='#([^\n]+.*)#';
预匹配($pattern,$output,$matches);
var_dump($matches);
我检查了这个模式,它应该可以工作,但正如我之前所说,preg_match返回null。
知道原因是什么吗?我想获取此标记之间的所有内容(包括空格和其他标记)

这是因为
*?
会导致回溯,这受到

更明智的做法是使用HTML或任何其他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;
}

不要用常规表达式解析html您需要regexp的
s
修饰符使
*
跨多行。谢谢Jack,它现在可以工作了