Html 确保匹配以字符串开头的正则表达式
我正在一些HTML上运行一个正则表达式,需要提取一些图像标题标签 图像标题标签如下所示:Html 确保匹配以字符串开头的正则表达式,html,regex,preg-match,Html,Regex,Preg Match,我正在一些HTML上运行一个正则表达式,需要提取一些图像标题标签 图像标题标签如下所示: title="Image Title Here" 这项任务很有效: (?<=title=").*?(?=") (?将DOMDocument与XPath一起使用应该不太容易出错: $html = <<<DATA <body> <h1>Text 1<img title="Not this"></h1> <h2>Text 2&
title="Image Title Here"
这项任务很有效:
(?<=title=").*?(?=")
(?将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);
$html=getAttribute('title');
}
印刷品(港币);;
见
'//h3/img[@title]
xpath表达式将找到所有包含img
子项的h3
标记,这些子项包含title
属性,$img->getAttribute('title')
将从这些属性中获取值。Regex和HTML不是好朋友,请使用解析器。谢谢,在我用url替换$HTMLvar之后,运行代码时会出现错误。另外,我只是想知道,如果我在另一个实际上是h1的标记或包含标题标记的标记上执行该操作,它会是“//h1[@title]”吗?要从URL获取数据,需要类似于$html=file\u get\u contents('http://api.somesite.com');代码>。请参阅帮助。这似乎工作得很好,出于某种原因,它在url上工作得很好,但在数组中获得了30个项目,然后发出警告:“警告:DOMDocument::loadHTML():意外结束标记:head-in-Entity,第15行C:\xampp\htdocs\Projects\test.php中的第132行”您知道如何解决这个问题吗?在获取URL内容后立即添加以下代码行:libxml\u use\u internal\u errors(true)代码>-这将尝试修复传入HTML中的问题。@zeddex让您了解如何加载其他图像:在浏览器中加载页面。打开开发人员工具的“网络”选项卡。向下滚动(或以任何方式加载更多图像)并记下HTTP请求。在PHP代码中复制相同的请求。
$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);