0

我正在通过 HTML 搜索“myfunc”。但是,大小写是不确定的。不幸的是,PHP 与 XPath 1 一起工作,因此所有搜索都区分大小写。

如何更新以下代码以搜索“myfunc”、“MyFunc”、“myFunc”等?

foreach($domxpath->query('//*[@*[contains(.,"myfunc")]]') as $node) {

以下不起作用。我也没有尝试实现translate() work-around

foreach($domxpath->query('//*[@*[matches(.,"[mM][yY][fF][uU][nN][cC]")]]') as $node) {

如果无法使用正则表达式,我如何搜索字符串数组(即“myfunc”、“MyFunc”、“myFunc”等)?

4

2 回答 2

3

matches 是 XPath 2 函数,在 XPath 1 中,您必须使用 translate 将其转换为规范化大小写:

 //*[@*[contains(translate(., "MYFUNC", "myfunc"),"myfunc")]]
于 2013-02-28T18:07:03.990 回答
0

使用不区分大小写选项进行匹配:

foreach($domxpath->query('//*[@*[matches(.,"myfunc","i")]]') as $node) {

要比较一系列值,只需使用=进行节点集比较:

(. = ("myfunc", "MyFunc", "myFunc"))

如果左序列中有任何东西在右序列中,则将返回 true。来自XPath 规范

如果要比较的两个对象都是节点集,那么当且仅当在第一个节点集中有一个节点并且在第二个节点集中有一个节点使得对两个节点的字符串值都为真。

于 2013-02-28T17:39:52.427 回答