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

2023-12-27

我有一个包含多个超链接的页面。我想要得到的格式如下:

<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(使用前将#替换为@)

使用 PHP 和 XPath 获取与正则表达式匹配的 href 的相关文章

  • 如何使用 Google 帐户对我们网站中的用户进行身份验证

    如何在我们的网站中使用 Google 帐户对用户进行身份验证 我希望用户重定向到谷歌登录页面 然后将他重定向到我的网站 我想要这个 PHP 实现 你要OAuth http code google com apis accounts docs
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • PHP - 扩展 __construct

    我想知道你是否可以帮助我 我有两个类 一个扩展了另一个 B 类将由各种不同的对象扩展 并用于常见的数据库交互 现在我希望 B 类能够处理其连接和断开连接 而无需来自 A 类或任何外部输入的指示 据我了解 问题是扩展类不会自动运行其 cons
  • 如何在 WordPress 中按类别获取所有帖子

    我想在 WordPress 中按类别获取帖子 args array post type gt project postslist get posts args 0 gt WP Post 对象 ID gt 421 post author gt
  • 来自本地 XML 的模拟 SoapClient 响应

    我想用文件中的 XML 来模拟 SoapClient 的响应 我如何创建一个 stdClass 对象 就像 SoapClient 从文件返回一样 客户端已经包装了 SoapClient 因此可以轻松模拟响应 我的模拟是这样的 soapCli
  • jquery上传完成后重定向到新页面

    我正在尝试让这个 jquery 工具与我的网站一起使用以进行文件上传 https github com blueimp jQuery File Upload https github com blueimp jQuery File Uplo
  • 为什么我的 javascript regex.test() 给出交替结果[重复]

    这个问题在这里已经有答案了 可能的重复 Javascript 正则表达式返回 true 然后 false 然后 true 等等 https stackoverflow com questions 2630418 javascript reg
  • Python 非贪婪正则表达式

    我如何制作一个像这样的Python正则表达式 这样 给定 a b c d e 蟒蛇匹配 b 代替 b c d 我知道我可以使用 代替 但我正在寻找一种更通用的解决方案 使我的正则表达式更加干净 有没有办法告诉python 嘿 尽快匹配这个
  • Doctrine 1 和 Symfony 1 的多个主键?

    我已经知道在 Symfony 1 和 Doctrine 1 中不可能使用多个主键 但是你们知道有什么好的解决方法吗 除了多对多关系之外 原则 1 不适用于多列上的主键 但如果你想使用多对多关系 请像这样使用 BlogPost columns
  • 删除 woocommerce 店面主页标题 php

    我正在使用 woocommerce 的店面主题 我需要用 php 删除主页标题 h1 我知道 css 解决方案 但我不想使用它 因为我想将 h1 添加到该页面的其他位置 并且在一个页面中包含 2 个 h1 对 seo 不利页 我也知道删除页
  • 如何在 Smarty 中打印 json

    我从 api 获取 json 如何使用 Smarty 打印 json Json格式 first name jinu last name mk loginid email protected cdn cgi l email protectio
  • 如何解决 Laravel 8 UI 分页问题?

    我在尝试最近发布的 laravel 8 时遇到了问题 我试图找出变化是什么以及它是如何工作的 当我这样做时 我遇到了分页 laravel 8 UI 变得混乱的问题 不知何故它发生了 有人可以帮助我吗 或者经历过同样的事情 像这样我在 lar
  • 我怎样才能让这个脚本在 WordPress 上运行?

    我有这个脚本 document ready function text1 click function this hide 代码html div class div1 p class text1 text to appear when th
  • PHP 错误:“无法通过引用传递参数 2”

    我只是需要有关这个 PHP 错误的帮助 我不太明白 致命错误 无法在第 13 行 web stud openup inactivatesession php 中通过引用传递参数 2
  • Java 正则表达式 - 字母数字,最多一个连字符,句点或下划线,七个字符长

    我是 Java 正则表达式工具的新手 尽管它们潜力巨大 但我很难完成这项任务 我想编写一个正则表达式来验证遵循以下语法的输入字符串 小写字母和数字的任意组合 仅一个下划线 一个破折号或一个句号 无其他特殊字符 最小长度为 5 我想出了以下解
  • magento成功页面变量

    我正在尝试捕获一些 magento 成功页面变量以传递给我们的广告公司 到目前为止 我已经得到了这个 但变量没有输出任何内容 数据需要采用以下格式 price1 price2 price3 qty1 qty2 qty3 sku1 sku2
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • Perl 正则表达式图灵完备吗?

    我见过 Ruby 和 Perl 程序员做了一些事情复杂的代码挑战 https codegolf stackexchange com questions 3596 regex validating regex完全用正则表达式 这前瞻和后瞻 h
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f

随机推荐

  • 使用 MS 编译器的 std::cout 非常慢

    我正在打印多次计算迭代的进度 输出实际上是其中最慢的部分 但只有当我使用 Visual C 编译器时 MinGW 在同一系统上才能正常工作 考虑以下代码 include
  • 实现 HttpSessionListener

    我面临着一个类似的问题 https stackoverflow com questions 1439743 whats wrong with my listener in my web xml并了解到我的侦听器类将在读取 web xml 时
  • Python、SQLite3:当提交介入时游标返回重复项

    此 Python 代码创建一个表 向其中插入三行并迭代这些行 并在游标完全耗尽之前进行干预提交 为什么它返回五行而不是三行 如果删除干预提交 则返回的行数如预期为 3 或者是否预期提交 甚至不触及相关表 会使游标无效 Edit 添加了忘记的
  • jQuery 的 .isWindow 方法?

    我试图从 jQuery 的动画函数中了解我能做什么 但最终遇到了各种我不理解的内部函数 最终落在了 isWindow 上 isWindow 的代码检查对象是否具有该属性setInterval 否则返回 false 当然 任何对象都可以具有以
  • 如何仅对一个 .vue 文件禁用 vue/multi-word-component-names eslint 规则?

    我正在使用Vue ESLint 插件 https eslint vuejs org 它有一个规则不允许使用单个单词的组件名称 https eslint vuejs org rules multi word component names h
  • PHP upload_max_filesize

    我的 php 文件上传有问题 在我的 php ini 中 upload max filesize 设置为 4mb 当我尝试上传大于该文件的文件时 我从未像预期的那样收到 UPLOAD ERR INI SIZE 错误 但页面再次显示表单 但没
  • 适用于 Google BigQuery 标准 SQL 的任何 JDBC 驱动程序

    我需要 JDBC 驱动程序将我的应用程序连接到 Google BigQuery 我尝试了 CData JDBC 驱动程序 但它不支持所有类型的标准 SQL 查询 还有其他完整的选择吗 官方BigQuery 的 JDBC 驱动程序 https
  • 即复杂的子域cookie问题

    我所有的 cookie 在子域上都工作得很好 但如果子域中有 那么 cookie 根本不会被读取 也根本不会正确 以下是我的测试结果 它将自我解释 justlife demo com works fine just life demo co
  • 如何通过 Google Tag Manager for Next-Js 设置 Google Analytics?

    以前我使用react ga npm 模块在我的下一个js 应用程序中插入谷歌分析 就是这样 import ReactGA from react ga export const initGA gt ReactGA initialize UA
  • 当新子项添加到 Firebase 数据库时发送通知

    我在我的应用程序中使用 Firebase 数据库 当新订单添加到数据库 新子添加到数据库 时 我需要向管理员发送通知 我发现了一个名为 Firebase 云消息传递的东西 但我不知道如何使用它 有什么帮助吗 Firebase Cloud M
  • 使用动态参数查询 Diesel 表

    我开始考虑使用 Diesel 来查询数据库 我有一个类似于下面结构的表格 这只是一个玩具项目 旨在帮助我了解 Diesel 的工作原理 derive Queryable Insertable table name posts struct
  • ServletContextListener 严重:配置类 marktest.Config 的应用程序侦听器时出错

    我的 Java servlet 似乎抱怨它找不到包 marktest 中包含的文件 我使用 Eclipse Indigo 和 Tomcat7 进行开发 这是错误 SEVERE Error configuring application li
  • 选择除一个元素之外的所有主体

    我试图选择 jQuery 中除 this 或悬停的元素之外的所有主体元素 我试图让身体达到一定的不透明度 但 这个 是为了保持其不透明度 这是我的代码 content img mouseenter function this animate
  • 自定义形状旋转问题

    我正在尝试围绕其中心旋转自定义形状 但无法获得预期的结果 我想要的是 形状应绕其中心旋转而不移动自身 我的解决方案目前正在做的是围绕其中心旋转整个形状 每次旋转都会改变其位置 我有多个形状 所以我创建了一个类来封装形状及其在以下类中的转换
  • CSS:百分比最小高度元素嵌套在百分比最小高度元素中

    我想让 html body 和wrapper 元素的最小高度都为 100 以便覆盖整个查看窗口 但我发现我只能使 html 遵守此声明 html body wrapper min height 100 html border 2px red
  • 随机化两个值之间的矩阵元素,同时保持行和列总和固定 (MATLAB)

    我遇到了一些技术问题 但我觉得使用 MATLAB 强大的工具集应该可以实现 我拥有的是一个由 0 和 w 组成的随机 n n 矩阵 例如生成的 A w rand n n
  • 动态ul li添加滚动条

    我搜索了许多帖子和论坛 因为我认为这可能是一个基本的东西 但没有找到它 所以在这里询问 我想做的就是添加滚动条 如果高度超过一定限制 假设菜单项超过3 我创建了一个jsfiddlehttp jsfiddle net euSWB http j
  • 了解多重继承中的虚表

    我有一个实现两个抽象类的类 如下所示 没有虚拟继承 无数据成员 class IFace1 public virtual void fcn int abc 0 class IFace2 public virtual void fcn1 int
  • 属性错误故障排除:“ResultSet”对象没有属性“findAll”

    我正在尝试解析http www ted com talks http www ted com talks所有演讲名称的页面 使用 BeautifulSoup 这是我所拥有的 import urllib2 from BeautifulSoup
  • 使用 PHP 和 XPath 获取与正则表达式匹配的 href

    我有一个包含多个超链接的页面 我想要得到的格式如下 div a href 123 text2 a div div a href 345 text1 a a href 678 text2 a div 我想提取三个 href 123 345 和