相当于XPath中的(.*)


Equivalent to (.*) in XPath

我正试图从XPath中的正则表达式中找到一个等价的(.*)。现在这就是我目前拥有的:

我有一个HTML a标记,其中href为world/nl44/town/ANYNUMBER,其中ANYNBUMBER,所以它可以是:world/nl44/town/12345world/nl44/town/1232被一个随机值取代(我只需要一个标记的值)。

查询看起来像这样:

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

综上所述:

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

我该怎么做?

您可以使用starts-with()函数:

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

XPath 2.0

XPath 2.0具有使用模式匹配的字符串函数,其中.*本身将起作用:

  • matches()
  • replace()
  • tokenize()

因此,在XPath2.0中,您可以使用:

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

XPath 1.0

XPath1.0不支持基于正则表达式的模式匹配,只支持基本的字符串函数。虽然.*没有直接等价,但有时可以使用starts-with()(在这种特殊情况下,请参阅@alexe的解决方案,+1)、contains()或其他XPath 1.0字符串函数来忽略字符串的部分,以获得与匹配.*类似的结果。作为另一个例子,可以通过substring()string-length()和字符串相等性检查的巧妙组合来忽略字符串的开头,从而有效地实现类似ends-with()的功能。