我有一个包含多个超链接的页面。我想要得到的格式如下:
<html>
<body>
<div id="diva">
<a href="/123" >text2</a>
</div>
<div id="divb">
<a href="/345" >text1</a>
<a href="/678" >text2</a>
</div>
</body>
</html>
我想提取三个 href 123,345 和 678。
我知道如何使用获取所有超链接$gm = $xpath->query("//a")
然后循环它们以获取 href 属性。
是否有某种正则表达式可以仅获取上述格式的属性(即“/digits”)?
Thanks
XPath 1.0,这是支持的版本DOMXPath()
,没有正则表达式功能。不过,您可以轻松编写自己的 PHP 函数来执行要调用的正则表达式DOMXPath
如果您需要一个,如中所述这个另一个答案 https://stackoverflow.com/questions/8031377/using-regex-in-php-xpath-evaluate.
有 XPath 1.0 的方法测试属性值是否为数字 https://stackoverflow.com/questions/3854345/xpath-test-if-is-number,您可以使用它href
之后的属性值/
字符,测试属性值是否遵循模式/digits
:
//a[number(substring-after(@href,'/')) = substring-after(@href,'/')]
UPDATE :
为了完整起见,这里是一个工作示例 https://eval.in/522532调用 PHP 函数preg_match
from DOMXPath::query()
完成相同的任务:
$raw_data = <<<XML
<html>
<body>
<div id="diva">
<a href="/123" >text2</a>
</div>
<div id="divb">
<a href="/345" >text1</a>
<a href="/678" >text2</a>
</div>
</body>
</html>
XML;
$doc = new DOMDocument;
$doc->loadXML($raw_data);
$xpath = new DOMXPath($doc);
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPHPFunctions("preg_match");
// php:function's parameters below are :
// parameter 1: PHP function name
// parameter 2: PHP function's 1st parameter, the pattern
// parameter 3: PHP function's 2nd parameter, the string
$gm = $xpath->query("//a[php:function('preg_match', '~^/\d+$~', string(@href))]");
foreach ($gm as $a) {
echo $a->getAttribute("href") . "\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)