使用matches()匹配特定的正则表达式



尝试使用matches((匹配特定单词

*//id[matches(.,lower-case('*s?Xanders?*'))]

示例:

Set of Xanderous- No match
Xander Tray of 6- Match
Tray of 6 pieces Xander- Match
Set of 6 Xander pieces- Match

"Xander"一词匹配的任何实例都是目标。

XPath正则表达式方言不处理单词边界的原因是,要正确处理,您需要对语言敏感-a"单词";是一件文物。

您可以执行tokenize(., 'P{L}+') = 'Xander',它将任何非字母序列标记为分隔符,然后测试其中一个标记是否为"Xander"。

我一直在运行一些测试,单词边界似乎没有集成到XML/XPATH词汇表中。因此,接下来最好的IMO是测试零个或多个字符周围的空白开始/结束字符串锚。因此,我最终得到了:

*//id[matches(lower-case(.),'.*(^|s)xander($|s).*')]

更好的方法是将lower-case一起删除,并使用第三个matches参数(标志(将其设置为不区分大小写的匹配:

*//id[matches(.,'.*(^|s)xander($|s).*','i')] 

粗略地说,如果你想获得完整的行匹配,如果它恰好包含单词Xander,你可以使用b来定界一个特定的单词,再加上一些贪婪运算符.*:

^.*bXanderb.*$

演示:https://regex101.com/r/PvKptN/1

或者,如果你不需要整条线,你可以简单地检查它是否包含Xander:

bXanderb

演示:https://regex101.com/r/PvKptN/2

我希望它能满足您使用的正则表达式风格

最新更新