XSL中的正则表达式错误

时间:2016-02-24 05:03:19

标签: xslt

正则表达式应该验证这样的单词a23-abcefghijk

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

但我收到语法错误我尝试转义字符,但还没找到任何解决方案

2 个答案:

答案 0 :(得分:1)

您的变量的值必须是一个字符串,因此您需要在select ...

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

就像现在一样,处理器正在尝试将您的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>

答案 1 :(得分: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>