我正在运行一些HTML的正则表达式,需要提取一些图像标题标签。
图片标题标签如下所示:
title="Image Title Here"
这适用于任务:
(?<=title=").*?(?=")
然而问题是它还会抓取不需要的标题标签。我注意到虽然在HTML中运行图像的正则表达式是在h3标签内。
如何更新我的正则表达式以确保它只能从&#39;
我现在的正则表达式是:
(?<=<h3).*(?<=title=").*?(?=")
答案 0 :(得分:2)
将DOMDocument
与XPath
一起使用应该不易出错:
$html = <<<DATA
<body>
<h1>Text 1<img title="Not this"></h1>
<h2>Text 2<img title="Not this"></h2>
<h3>Text 3<img title="This"></h3>
</body>
DATA;
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$imgs = $xpath->query('//h3/img[@title]');
$res = array();
foreach($imgs as $img) {
array_push($res, $img->getAttribute('title'));
}
print_r($res);
请参阅PHP demo
'//h3/img[@title]'
xpath表达式将找到包含h3
个包含img
个属性的子项的所有title
个标记,$img->getAttribute('title')
将从这些属性中获取值