正则表达式,确保匹配以字符串开头

时间:2016-11-14 13:28:29

标签: html regex preg-match

我正在运行一些HTML的正则表达式,需要提取一些图像标题标签。

图片标题标签如下所示:

title="Image Title Here"

这适用于任务:

(?<=title=").*?(?=")

然而问题是它还会抓取不需要的标题标签。我注意到虽然在HTML中运行图像的正则表达式是在h3标签内。

如何更新我的正则表达式以确保它只能从&#39;

我现在的正则表达式是:

(?<=<h3).*(?<=title=").*?(?=")

1 个答案:

答案 0 :(得分:2)

DOMDocumentXPath一起使用应该不易出错:

$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')将从这些属性中获取值