A repetition count in a regex is indicated by curly braces, not square
brackets. Remember also that in an attribute value template, curly braces
must be doubled. So you want:
regex='(\d{{4}})(\d{{2}})(\d{{2}})'
Alternatively, you could just as well use
regex='(....)(..)(..)'
Some people might argue that regular expressions are overkill for this task
and you should use concat() and substring() - but that's an area where
opinions may differ.
Michael Kay
-----Original Message-----
From: Bruce D'Arcus [mailto:bdarcus(_at_)myrealbox(_dot_)com]
Sent: 12 September 2004 15:58
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] regexp question
Using XSLT 2.o, I want to take this:
<meta name="pdate" content="20001123"/>
.... and get this:
<meta name="dateIssued" content="2000-11-23"/>
Why isn't the following pattern matching (in the xhtml:meta
template),
and is there a better way?
<xsl:when test="@name='pdate'">
<xsl:analyze-string select="@content"
regex='(\d[4])(\d[2])(\d[2])'>
<xsl:matching-substring>
<meta name="dateIssued">
<xsl:attribute name="content">
<xsl:value-of select="regex-group(1)"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="regex-group(2)"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="regex-group(3)"/>
</xsl:attribute>
</meta>
</xsl:matching-substring>
<xsl:non-matching-substring>
<meta name="dateIssued" content="{.}"/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:when>
Bruce
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--