在xpath 1中不区分大小写的搜索

时间:2013-02-28 17:36:38

标签: php regex xpath case-insensitive

我正在通过HTML搜索“myfunc”。但是,资本化是不确定的。不幸的是,PHP适用于XPath 1,因此所有搜索都区分大小写。

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

 //*[@*[contains(translate(., "MYFUNC", "myfunc"),"myfunc")]]

答案 1 :(得分:0)

使用case-insentitive option进行匹配:

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

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

(. = ("myfunc", "MyFunc", "myFunc"))
如果左侧的任何内容以正确的顺序排列,

将返回true。来自XPath spec

  

如果要比较的两个对象都是节点集,那么当且仅当第一个节点集中有一个节点而第二个节点集中有一个节点时才进行比较,以便执行两个节点的字符串值的比较是真的。