等同于 XPath 中的 (.*)

Equivalent to (.*) in XPath

我正在尝试从 XPath 中的正则表达式中找到与 (.*) 等效的项。现在这是我目前拥有的:

我有一个 HTML a-tag,带有指向 world/nl44/town/ANYNUMBER 的 href,其中 ANYNBUMBER 所以它可以是例如: world/nl44/town/12345world/nl44/town/1232 是替换为随机值(我只需要a标签的值)。

查询看起来像这样:

$elements = $xpath->query('//a[@href="/world/nl44/town/ANYNUMBER"]'); 当然 ANYNUMBER 替换为 (.*)

的 XPath 等价物

总结一下:

<a href="/world/nl44/town/12344">Something</a> <- 这就是我的 a 的样子,其中 12344 可以是任何数字,我只需要标签之间的值,所以在这个例子中我希望它 return "Something".

我该怎么做?

您可以使用 starts-with() function:

//a[starts-with(@href, "/world/nl44/town/")]

XPath 2.0

XPath 2.0 有 String Functions that Use Pattern Matching,其中 .* 本身可以工作:

因此在 XPath 2.0 中,您可以使用:

//a[matches(@href, '/world/nl44/town/.*')]

XPath 1.0

XPath 1.0 不支持基于正则表达式的模式匹配,只支持基本的字符串函数。虽然 .* 没有直接等价,但有时可以使用 starts-with() (see in this particular case, +1), contains(), or the other XPath 1.0 String Functions to disregard parts of a string to achieve similar results to matching .*. As another example, the start of a string can be disregarded via a clever combination of substring(), string-length() 和字符串相等性检查,有效地实现类似 ends-with() 的功能。