Subject: Re: xsl:analyze-string explanation needed
From: David Carlisle <davidc@xxxxxxxxx>
Date: Thu, 20 Jul 2006 14:58:41 +0100
|
> are you saying that I should change the regex so that it matches the
> entire input string rather than the part I'm interested in,
yes
then there will only be one substring aafter the regex analysis, either
1 matching substring (the whole string) or one none matching substring.
<xsl:stylesheet version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="main">
<xsl:for-each select="(
'3 minutes 57 seconds',
'3 minutes',
'5 seconds',
'rubbish')">
:<xsl:value-of select="."/>
::: <xsl:analyze-string select="." regex="([0-9]+) minutes.*$">
<xsl:matching-substring>
<xsl:value-of select="60 * xs:integer(regex-group(1))" />
</xsl:matching-substring>
<xsl:non-matching-substring>0</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
$ saxon8 -it main regex.xsl
<?xml version="1.0" encoding="UTF-8"?>
:3 minutes 57 seconds
::: 180
:3 minutes
::: 180
:5 seconds
::: 0
:rubbish
::: 0
|