【问题标题】:case insensitive search in xpath 1xpath 1 中不区分大小写的搜索
【发布时间】:2013-02-28 17:36:38
【问题描述】:

我正在通过 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”等)?

【问题讨论】:

    标签: php regex xpath case-insensitive


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      使用case-insentitive option 进行匹配:

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

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

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

      如果左序列中有任何右序列中的任何内容,则将返回 true。来自XPath spec

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        • 2010-09-15
        • 2013-09-26
        • 2023-03-20
        • 1970-01-01
        • 2010-10-13
        • 2012-01-04
        相关资源
        最近更新 更多