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

时间:2015-07-27 08:47:31

标签: regex xslt xml-parsing

我想编写一个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>

1 个答案:

答案 0 :(得分:0)

^放在方括号replace($input_param,'[^a-zA-Z0-9_ * & . , #]','')内,但您也可以使用translate($input_param, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0-9_ * & . , #', '')