I was wondering if it is possible to use analyze-string
and set multiple groups within the RegEx and then store all of the matching groups in variables to use later on.
like so:
<xsl:analyze-string regex="^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee" select=".">
<xsl:matching-substring>
<xsl:variable name="varX">
<xsl:value-of select="regex-group(1)"/>
</xsl:variable>
<xsl:variable name="varY">
<xsl:value-of select="regex-group(2)"/>
</xsl:variable>
</xsl:matching-substring>
</xsl:analyze-string>
This doesn't actually work, but that's the sort of thing I'm after, I know I can wrap the analyze-string
in a variable, but that seems daft that for every group I have to process the RegEx, not very efficient, I should be able to process the regex once and store all of the groups for use later on.
Any ideas?
Well does
help? That way you have a variable named
groups
which is a sequence ofgroup
elements with the captures.This transformation shows that
xsl:analyze-string
isn't necessary to obtain the wanted results -- a simpler and generic solution exists.:when applied on this XML document:
which produces the wanted, correct result:
Here we don't rely on knowing the RegEx (can be supplied as parameter) and the string -- we just replace the string with a delimited string of the RegEx groups, which we then tokenize and every item in the sequence produced by
tokenize()
can readily be assigned to a corresponding variable.We don't have to find the wanted results buried in a temp. tree -- we just get them all in a result sequence.