当前位置: 首页 > 知识库问答 >
问题:

XPath:匹配整个单词(使用带有不区分大小写标志的匹配函数)

寇开畅
2023-03-14

使用XPath,我想“匹配整个单词”(用户选项,就像VS搜索一样)。

似乎函数包含匹配项的工作方式类似,尽管匹配项允许使用类似于i的标志来区分大小写。

换句话说,我对这两个XPath查询得到了相同的结果:

<pets>
    <dog name="Rupert" color="grey"/>
    <dog name="Ralph" color="brown"/>
    <cat name="Marvin the Cat" color="white"/>
    <cat name="Garfield the Cat" color="orange"/>
    <cat name="Cat" color="grey"/>
    <cat name="Fluffy" color="black"/>
</pets>

Matches XPath: //cat[descendant-or-self::*[@*[matches(.,'Cat')]]]
    returns:
    <cat name="Marvin the Cat" color="white"/>
    <cat name="Garfield the Cat" color="orange"/>
    <cat name="Cat" color="grey"/>


Contains XPath: //cat[descendant-or-self::*[@*[contains(.,'Cat')]]]
    returns:
    <cat name="Marvin the Cat" color="white"/>
    <cat name="Garfield the Cat" color="orange"/>
    <cat name="Cat" color="grey"/>

但我想使用matches来返回只与“Cat”整词匹配的结果:

<cat name="Cat" color="grey"/>

如何调整matches查询,使其匹配整个单词?

编辑:我忘了提到我仍然需要使用matches函数,因为我需要区分大小写标志。


共有3个答案

范豪
2023-03-14

这对你有用吗?

//cat[@*='Cat']
长孙淳
2023-03-14

这里有三个相关的函数/运算符。

匹配()执行正则表达式匹配;您可以使用它来匹配子字符串或使用锚(^cat$)匹配整个字符串,并且您可以设置“i”标志以使其区分大小写。

包含()对子字符串进行精确匹配;您可以使用第三个参数(排序规则)来请求大小写盲匹配,但指定排序规则的方式取决于您使用的处理器。

eq运算符对整个字符串进行精确匹配;“默认排序规则”(在XPath的情况下通常会使用处理器的API设置)可用于请求区分大小写的匹配。这似乎是最接近您的要求的一种,唯一的缺点是指定排序规则比使用匹配项()的“i”标志更依赖于系统。

晋坚
2023-03-14

使用字符作为定位点怎么样?

//cat[descendant-or-self::*[@*[matches(.,'^Cat$')]]]

根据XQuery 1.0和XPath 2.0中的正则表达式语法:

添加两个元字符^和$。默认情况下,元字符^匹配整个字符串的开头,而$匹配整个字符串的结尾。

 类似资料:
  • 本文向大家介绍grep 匹配整个单词,包括了grep 匹配整个单词的使用技巧和注意事项,需要的朋友参考一下 示例 给定一个文件sample: grep“ hello”的法线返回: 使用-w允许选择包含构成整个单词的匹配项的行:            

  • 我试图在Elasticseach 7中实现部分的、区分大小写的匹配。 我正在使用设置创建索引: 以及映射: 以下查询将正确返回文档: 但当我将搜索词小写时,它不会返回文档: 如何配置Elasticsearch,使其与使用小写搜索词的名称字段值匹配?

  • 如何在Java中以区分大小写的方式进行匹配?我的意思是,我想编写一个类似的regex。但是我想匹配以及等等。在Java中最简单的方法是什么?

  • 问题内容: 我在网页中使用javascript。我正在尝试通过文本框搜索整个单词。假设我搜索:“我”,我应该在文本中找到所有“我”,但每个语音都找不到“ memmm”。 我正在使用javascript的search(’my regex expression’)执行当前搜索(没有成功)。 谢谢! 编辑:在使用\ b开关的几个建议[似乎不起作用]之后,我正在发布有关我的问题的修订说明: 嗯,出于某种原

  • 问题内容: 如何在mysql中匹配整个单词? 举例来说,如果我输入“ 刘 ”,我 不 希望匹配“ 劳拉 ”或“ 劳伦斯 ”。 以下是我的工作查询,将“ lau ”与“ laura ”匹配 有解决我的主意吗? 我使用的原因是我的内容具有html标签,例如, 我不想搜索可能落在诸如的标签内的单词。 问题答案: 这行得通吗? REGEXP’[^ <] * lau [[:>:]]’ 根据文档,[[:::]

  • 问题内容: 我看过每一篇文章,发现可以执行精确匹配,不区分大小写的查询,但是在实现时,它们并不能满足我的要求。 在将此问题标记为重复之前,请阅读整篇文章。 给定一个用户名,我想查询我的Elasticsearch数据库以仅返回一个与该用户名完全匹配但不区分大小写的文档。 我尝试为属性指定分析器,并使用查询来实现此行为。虽然这解决了区分大小写的匹配问题,但在精确匹配时失败了。 我考虑使用规范化程序,但