You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XPath中对字符串进行正则转义(regex-quote)?

XPath中安全处理tokenize函数字面量分隔符的方案

1. XPath 3.1+ 原生方案(最优)

XPath 3.1及以上版本提供了fn:regex-quote()函数,作用和Java的Pattern.quote()完全一致——将输入字符串转义为正则表达式中的字面量,自动处理所有特殊字符(如.、*、+、[]等)。

直接使用示例:

<xsl:template name="tokenize-with-literal-separator">
  <xsl:param name="text" as="xs:string"/>
  <xsl:param name="separator" as="xs:string"/>
  <xsl:sequence select="tokenize($text, regex-quote($separator))"/>
</xsl:template>

2. 低版本XPath/XSLT兼容方案

如果只能用XPath 2.0或更低版本,没有原生转义函数,可以自定义一个转义函数来处理正则特殊字符:

<xsl:function name="local:escape-regex" as="xs:string">
  <xsl:param name="input" as="xs:string"/>
  <!-- 覆盖所有正则元字符 -->
  <xsl:variable name="meta-chars" select="'.\*+?[^]$(){}=!<>|:-'"/>
  <xsl:if test="string-length($input) > 0">
    <xsl:variable name="first-char" select="substring($input, 1, 1)"/>
    <xsl:if test="contains($meta-chars, $first-char)">
      <xsl:text>\</xsl:text>
    </xsl:if>
    <xsl:value-of select="$first-char"/>
    <xsl:value-of select="local:escape-regex(substring($input, 2))"/>
  </xsl:if>
</xsl:function>

调用方式:

<xsl:sequence select="tokenize($text, local:escape-regex($separator))"/>

3. 纯字符串操作的分词方案(无正则依赖)

如果不想涉及正则转义逻辑,直接用substring-before和substring-after实现迭代分词,完全按字面量匹配分隔符:

<xsl:template name="split-literal-text">
  <xsl:param name="text" as="xs:string"/>
  <xsl:param name="separator" as="xs:string"/>
  <xsl:choose>
    <xsl:when test="contains($text, $separator)">
      <xsl:sequence select="substring-before($text, $separator)"/>
      <xsl:call-template name="split-literal-text">
        <xsl:with-param name="text" select="substring-after($text, $separator)"/>
        <xsl:with-param name="separator" select="$separator"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:sequence select="$text"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

这个方案兼容所有XSLT版本,适合对正则不熟悉或需要最大化兼容性的场景。

内容的提问来源于stack exchange,提问作者martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:25:17