我正在通过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”等)?
答案 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:
如果要比较的两个对象都是节点集,那么当且仅当第一个节点集中有一个节点而第二个节点集中有一个节点时才进行比较,以便执行两个节点的字符串值的比较是真的。