Dave,
<xsl:analyze-string select="$input" regex="{$regex}">
<xsl:matching-substring>
<xsl:for-each select="for $i in (1 to 10) return $i">
<xsl:if test="not(string-length(regex-group(.)) = 0)">
<match><xsl:value-of select="regex-group(.)"/> </match>
</xsl:if>
</xsl:for-each>
</xsl:matching-substring>
<xsl:non-matching-substring>
<mismatch><xsl:value-of select="."/></mismatch>
</xsl:non-matching-substring>
</xsl:analyze-string>
If you just want to get the matches and mismatches in a sequence, then
use:
<xsl:analyze-string select="$input" regex="{$regex}">
<xsl:matching-substring>
<match><xsl:value-of select="." /></match>
</xsl:matching-substring>
<xsl:non-matching-substring>
<mismatch><xsl:value-of select="." /></mismatch>
</xsl:non-matching-substring>
</xsl:analyze-string>
The result in the case you're trying will be:
<match>ABC_PARA</match>
<mismatch>_</mismatch>
<match>_PARA</match>
You should only use regex-group() if you want to get the substrings
within a matching substring that match a particular bracketed
subexpression within the regular expression.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list