2013-05-07 124 views
0

我正在使用XSLT 2.0并尝试提取所需的caracterer正则表达式。正则表达式XSLT,提取匹配

我试着用tokenize(),但更令人费解。

<xsl:value-of select="tokenize('2.0-Cloverleaf-3d', '-')" /> 

通过其结果是:2.0,应当返回的结果是:。字符串是(2.0-Cloverleaf- * * d)。

我更愿意做这样:

<xsl:if test="matches(x:td/x:p, '.+3d$')"> 
    true 
    </xsl:if> 

有什么功能得到你需要的字符,而不需要一个“如果”?谢谢。

编辑

我想我会离开它这样。

<xsl:variable name="places"> 
    <xsl:if test="matches(x:td/x:p, '.+3d$')">3</xsl:if> 
    <xsl:if test="matches(x:td/x:p, '.+4d$')">4</xsl:if> 
    <xsl:if test="matches(x:td/x:p, '.+5d$')">5</xsl:if> 
</xsl:variable> 

但是,如果有更好的方法来做到这一点。谢谢。

+1

你想返回或得到什么样的字符?我想你只是想检查字符串是否以'3d'结尾,因为我们在2.0中有一个函数是ends-with(),但它返回布尔值。如果你有固定的长度,你也可以使用substring()。 – 2013-05-07 15:29:14

+0

我喜欢这样,结束与()。谢谢。 – 2013-05-07 15:31:10

回答

3

您可以使用替换,用您需要的部分替换所有部分。

在XPath 2:

replace(x:td/x:p, '^.*([0-9])d$', '$1') 

在XSL:

<xsl:value-of select="replace(x:td/x:p, '^.*([0-9])d$', '$1')" /> 
+0

正是我所需要的。谢谢 :-)。 – 2013-05-07 16:47:55

0

你可以做到这一点与tokenize()但首先收集令牌到一个变量。

<xsl:variable name="tokens" select="tokenize(x:td/x:p,'-')"/> 

然后选择最后一个标记并使用substring()获取数字。

<xsl:value-of select="substring(item-at($tokens, 3), 1, 1)" />