我有以下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中我哪里出错了。
由于
答案 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}
,因此您可以使用单个?
,但当然这并不总是一种选择。