You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合正则与XPath evaluate方法查询ID前缀匹配的所有XML条目

问题原因

你之前的写法不生效核心有两个问题:

  1. XPath的=是等值比较运算符,不是正则匹配符,你把正则表达式拼接成字符串后,相当于在查找id值完全等于41:/[0-9]{4}-[0-9]{2}-[0-9]{2}/这个字面量的节点,自然匹配不到结果。
  2. PHP默认使用的是XPath 1.0版本,没有内置正则匹配函数,不能直接在XPath语句中写正则做匹配。

解决方案

方案1:前缀匹配(最简实现,满足大部分场景)

如果你不需要严格校验后缀的日期格式,只需要匹配id前缀为[输入ID]:的节点,直接用XPath 1.0内置的starts-with函数即可:

if ($xpath->evaluate("count(self::*[starts-with(id, '$trainId:')]) > 0", $item)) {
    // 匹配成功后的业务逻辑
}

方案2:严格校验日期格式

如果需要确保后缀是合法的YYYY-MM-DD格式,可以先取出id值再用PHP正则判断:

// 先获取当前item节点的id文本值
$currentId = $xpath->evaluate('string(id)', $item);
// 正则匹配前缀+日期格式,注意用preg_quote转义输入的trainId避免正则注入
if (preg_match('/^' . preg_quote($trainId, '/') . ':[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $currentId)) {
    // 匹配成功后的业务逻辑
}

内容的提问来源于stack exchange,提问作者srd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:48:02