[xsl] difference in regexp matches() and analyze-string

Subject: [xsl] difference in regexp matches() and analyze-string
From: Ruud Grosmann <r.grosmann@xxxxxx>
Date: Mon, 31 Dec 2007 16:57:31 +0100
Hi all,

the more I work with xsl, the less I understand of it.

Who can explain why a regexp works with matches and the same doesnt with analyze-string:

input

<doc>
    <al>1. eerste alinea</al>
    <al>2. tweede alinea</al>
    <al>3. tweede alinea</al>
</doc>

stylesheet


<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:my='http:/www.ruudgrosmann.nl/func'
exclude-result-prefixes="xs my">


<xsl:output indent='yes'/>

  <xsl:template match="/">
    <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="al">
    <xsl:variable name='txt' select="./text()"/>
    <xsl:variable name='re2'
          select="concat('^(', '2\.)',  '\s+(.*)$')"
                      as="xs:string"/>


<xsl:if test="matches($txt, $re2)"> <xsl:text>MATCH</xsl:text> </xsl:if> <xsl:analyze-string select="$txt" regex="$re2" > <xsl:matching-substring> <match/> </xsl:matching-substring>

          <xsl:non-matching-substring>
            <no-match/>
          </xsl:non-matching-substring>
        </xsl:analyze-string>
  </xsl:template>

</xsl:stylesheet>



output

<?xml version="1.0" encoding="UTF-8"?>
        <no-match/>
        MATCH<no-match/>
        <no-match/>


For the second al element the regexp ( being ^(2\.)\s+(.*)$' ) works for matches, but not for analyse-string (saxon 9B). I would expect a match in both cases. What did I misunderstand?


thanks, Ruud

Current Thread