2016-02-24 100 views
0

正则表达式应该验证这样的话A23-abcefghijk正则表达式错误

<xsl:variable name="myRegex"> 
    <xsl:value-of select="a\\d{2}\\-[a-zA-Z]+" /> 
    </xsl:variable> 

但我正在逐渐语法错误,我试图转义字符,但没有找到任何解决方案尚未

+1

你尝试单引号和斜杠吗? () –

+1

我认为您使用双反斜杠是因为使用其他主机语言。在C或Java中,字符串文字中的反斜线需要转义为“\\”。 XML或XSLT中的情况并非如此,反斜杠没有特殊含义。 –

回答

1

您的变量的值必须是一个字符串,所以需要引用它的select里面...

<xsl:variable name="myRegex" select="'a\d{2}-[a-zA-Z]+'"/> 

像现在的凝固酶原ssor正试图将您的select评估为XPath表达式。

另请注意,如果您使用XSLT 1.0,则必须使用extension function(以及支持它的处理器)。

这里有一个2.0例子...

XML输入

<doc> 
    <test>a23-abcefghijk</test> 
    <test>qwerty</test> 
</doc> 

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:variable name="myRegex" select="'a\d{2}-[a-zA-Z]+'"/> 

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="test"> 
    <test matches="{if (matches(.,$myRegex)) then 'yes' else 'no'}"> 
     <xsl:value-of select="."/> 
    </test> 
    </xsl:template> 

</xsl:stylesheet> 

XML输出

<doc> 
    <test matches="yes">a23-abcefghijk</test> 
    <test matches="no">qwerty</test> 
</doc> 
+0

我正在使用XSLT 1.0 ..现在我在样式表中使用类似xmlns:javaString =“xalan://java.lang.String”的样式 和调用匹配函数 – Furqan

+0

@Furqan - 你仍然有麻烦吗?如果是这样,请更新您的问题与更多细节。 –

+0

其解决谢谢:) – Furqan

0
<xsl:variable name="myRegex"> 
    <xsl:value-of select="regExp:match('This is a test string', '(a\d{2}\-[a-zA-Z]+)', 'g'" /> 
</xsl:variable>