我有下面的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哪里出错了。
谢谢
发布于 2013-12-18 11:01:38
正如我所怀疑的,{0,1}是问题的根源--但不是因为我想的原因!
http://www.w3.org/TR/xslt20/#analyze-string
注: 因为regex属性是属性值模板,所以正则表达式中的花括号必须加倍。例如,要匹配1到5个字符的序列,请编写
regex=".{{1,5}}"。对于包含许多花括号的正则表达式,使用诸如regex="{'[0-9]{1,5}[a-z]{3}[0-9]{1,2}'}"这样的表示法或使用变量可能更方便。
因为这里您只使用{0,1},所以您可以使用单个?,但是当然,这并不总是一个选项。
https://stackoverflow.com/questions/20655436
复制相似问题