如何使用XSLT 2.0和REGEX(没有\ b字边界)在文本中查找单词?

时间:2010-03-07 19:22:27

标签: regex xslt xslt-2.0 word-boundary

我正在尝试扫描一串单词,并使用REGEX在XSLT 2.0样式表中查找特定单词(不区分大小写)的存在。

我有一个单词列表,我想迭代并确定它们是否存在于给定的字符串中。

我希望在给定文字中的任何位置匹配单词,但我不想在单词中匹配(即搜索 {{ 1}} 匹配“foo d”,搜索 foo 应该“strong bar”上的 匹配。

XSLT 2.0 REGEX没有单词边界(bar),所以我需要尽可能地复制它。

2 个答案:

答案 0 :(得分:4)

您可以使用交替来避免重复:

<xsl:if test="matches($prose, concat('(^|\W)', $word, '($|\W)'),'i')">

答案 1 :(得分:2)

如果您的XSLT 2.0处理器是Saxon 9,那么您可以通过使用感叹号启动flag属性来使用Java正则表达式语法(包括\ b)和函数matches,tokenize和replace:

<xsl:value-of select="matches('all foo is bar', '\bfoo\b', '!i')"/>

Michael Kay最近在XSL邮件列表中提到了这个选项。