xsl-list
[Top] [All Lists]

RE: regexp question

2004-09-12 10:58:28
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>
--+--





<Prev in Thread] Current Thread [Next in Thread>