代码之家  ›  专栏  ›  技术社区  ›  Mads Hansen

如何使用xslt 2.0和regex(没有单词边界)在文本中查找单词?

  •  1
  • Mads Hansen  · 技术社区  · 15 年前

    我试图扫描一个字符串,并使用regex在XSLT2.0样式表中查找特定单词(不区分大小写)。

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

    我想在给定文本中的任何地方匹配一个单词,但是 我不想匹配 在内部 一个字 (即搜索 foo 应该 匹配于“ 和搜索 bar 应该 在“re”上匹配 酒吧 “”。

    xslt 2.0 regex没有单词边界( \b ,所以我需要尽我所能复制它。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Tim Pietzcker    15 年前

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

    <xsl:if test="matches($prose, concat('(^|\W)', $word, '($|\W)'),'i')">
    
        2
  •  1
  •   Martin Honnen    15 年前

    如果您的XSLT 2处理器是Sxon 9,那么可以使用Java正则表达式语法(包括\b)与函数匹配、令牌化和替换,并通过标记标记来启动标记属性:

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

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