字符串模式不正确匹配

时间:2013-12-18 10:21:37

标签: regex xslt-2.0

我有以下XML代码

<page>U1/68/5, U1/73/2, V1/65B/43, V5/4E/8E</page>

我正在尝试下面的XSLT。

<xsl:template match="page"> 
      <xsl:analyze-string select="." regex="([a-zA-Z][0-9]+)/([(0-9)]+[a-zA-Z]{0,1})/([(0-9)]+[a-zA-Z]{0,1})">
          <xsl:matching-substring>
            <a
              href="{concat('er:#HKWBV3_PT_',regex-group(1),'/',regex-group(1),'-',regex-group(2),'-',regex-group(3))}">
              <xsl:value-of select="."/>
            </a>
            </xsl:matching-substring>
            <xsl:non-matching-substring>
                <xsl:value-of select="."/>
            </xsl:non-matching-substring>
        </xsl:analyze-string>    
</xsl:template>

当我使用上面的XSLT时,<xsl:non-matching-substring>块被调用,当我在regexpal.com中尝试相同的REGEX时,条件正在接受。请告诉我在REGEXmatch中我哪里出错了。

由于

1 个答案:

答案 0 :(得分:3)

我怀疑{0,1}是问题的原因 - 但不是因为我想的原因!

http://www.w3.org/TR/xslt20/#analyze-string

  

注意:

     

因为regex属性是属性值模板,所以正则表达式中的花括号必须加倍。例如,要匹配一到五个字符的序列,请写regex=".{{1,5}}"。对于包含许多大括号的正则表达式,使用诸如regex="{'[0-9]{1,5}[a-z]{3}[0-9]{1,2}'}"之类的表示法或使用变量可能更方便。

由于此处您只使用{0,1},因此您可以使用单个?,但当然这并不总是一种选择。