如何使用php正则表达式获取描述?

时间:2018-06-30 05:45:21

标签: php regex

我正在制作网络爬虫,我需要提取包含描述的元数据,这就是我所做的:

$html = file_get_contents('http://www.google.com');
preg_match('/<meta name="description" content="(.*)"/>\i', $html, $description);
$description_out = $description;
var_dump($description_out);

我得到这个错误

  

警告:preg_match():未知修饰符“>”在   C:\ xampp \ htdocs \ webcrawler \ php-web-crawler \ index.php在第21行

正确的正则表达式是什么?

2 个答案:

答案 0 :(得分:0)

您的模式不正确。您从/分隔符开始,然后在模式中有一个未转义的/,这结束了模式以及将其读取为修饰符后的所有内容。
然后,您的结束定界符使用了错误的方式,\应该为/

'/<meta name="description" content="(.*)"\/>/i',

答案 1 :(得分:0)

作为替代方案,可以使用带有/html/head/meta[@name="description"]/@content和xpath表达式的DOMDocumentDOMXPath来获取内容属性,而不使用正则表达式。

$document = new DOMDocument();
$document->loadHTML($html);
$xpath = new DOMXPath($document);
$items = $xpath->query('/html/head/meta[@name="description"]/@content');
foreach ($items as $item) {
    echo $item->value . "<br>";
}

$items的类型为DOMNodeList,您可以使用foreach进行循环。 $item的类型为DOMAttr,您可以从中获得value