使用PHP和XPath获取与正则表达式匹配的href - php

我有一个包含几个超链接的页面。我想要的格式是:

<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”)的属性?

谢谢

参考方案

Xcc 1.0是DOMXPath()支持的版本,没有正则表达式功能。但是,您可以轻松编写自己的PHP函数来执行要从DOMXPath调用的Regex表达式,如this other answer中所述。

有XPath 1.0通往test if an attribute value is a number的方法,您可以在href字符后的/属性值上使用该方法,以测试属性值是否遵循模式/digits

//a[number(substring-after(@href,'/')) = substring-after(@href,'/')]

更新:

为了完整起见,这里是a working example,它从preg_match调用PHP函数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";
}

PHP-复选框组 - php

我有一个需要发布的表单复选框组。<input type="checkbox" value="true" checked name="chk0[]"> <input type="checkbox" value="false" name=…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

当使用jquery的id做某事时,id可以来自任何一种标记吗? - php

我是JQuery的新手,我正尝试使用PHP,HTML和JQuery编写代码。我想用具有ID的标签替换HTML中的所有<?php echo $var; ?>。例如,我想使用<div id="name"></div>之类的东西,然后使用$("#name")将其显示在该div字段中。我的问…

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

未提交附加字段值 - php

我在PHP中有一组表单字段。我还添加了jQuery功能来克隆某些字段并将其添加到表单中。但是,在提交表单后,仅提交原始字段,而不提交通过克隆添加的字段。的PHP<form id="myForm" method="post" action"..."> <div class="…