如何在 XSLT 的正则表达式模式中使用 NOT 运算符 (^)?

How to use NOT operator (^) in regular expression pattern of XSLT?

我想编写一个 XSLT 函数来替换除以下字符之外的所有字符:

0-9A-Za-z_ * & . , #

所以,我在下面的函数中写了一个正则表达式模式:

<xsl:function name="wd:allowed_characters">
        <xsl:param name="input_param" />
        <xsl:if test="$input_param !=' '" >
            <xsl:value-of select="normalize-space(replace($input_param,'^[a-zA-Z0-9_ * & . , #]',''))" />
        </xsl:if>
    </xsl:function>

看起来,Not 运算符 (^) 不能像其他语言那样工作。 你能告诉我我哪里做错了吗?我怎样才能在这里实现我的目标?

正确的函数如下:

 <xsl:function name="wd:allowed_characters">
        <xsl:param name="input_param" />
        <xsl:if test="$input_param !=' '" >
            <xsl:value-of select="normalize-space(replace($input_param,'[^.#, \- _ * a-zA-Z0-9]',''))" />
        </xsl:if>
    </xsl:function>

^放在方括号replace($input_param,'[^a-zA-Z0-9_ * & . , #]','')里面,也可以直接用translate($input_param, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0-9_ * & . , #', '').