我正在尝试使用 REGEX 扫描一串单词并在 XSLT 2.0 样式表中查找特定单词(不区分大小写)的存在。
我有一个我希望迭代并确定它们是否存在于给定字符串中的单词列表。
我想在给定文本中的任何地方匹配一个单词,但我不想在一个单词内匹配(即搜索不foo应该匹配“ d”,搜索不应该匹配“re ”)。foobarbar
XSLT 2.0 REGEX 没有单词边界(\b),所以我需要尽可能地复制它。
我正在尝试使用 REGEX 扫描一串单词并在 XSLT 2.0 样式表中查找特定单词(不区分大小写)的存在。
我有一个我希望迭代并确定它们是否存在于给定字符串中的单词列表。
我想在给定文本中的任何地方匹配一个单词,但我不想在一个单词内匹配(即搜索不foo应该匹配“ d”,搜索不应该匹配“re ”)。foobarbar
XSLT 2.0 REGEX 没有单词边界(\b),所以我需要尽可能地复制它。
您可以使用交替来避免重复:
<xsl:if test="matches($prose, concat('(^|\W)', $word, '($|\W)'),'i')">
如果您的 XSLT 2.0 处理器是 Saxon 9,那么您可以使用 Java 正则表达式语法(包括 \b)和函数匹配、标记化和替换,方法是使用感叹号开头的标志属性:
<xsl:value-of select="matches('all foo is bar', '\bfoo\b', '!i')"/>
Michael Kay 最近在 XSL 邮件列表中提到了该选项。