RE: [xsl] regexp question

Subject: RE: [xsl] regexp question
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Sun, 12 Sep 2004 18:58:28 +0100
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@xxxxxxxxxxxxx] 
> Sent: 12 September 2004 15:58
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> 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

Current Thread