Re: [xsl] Could not use matches in Regular Expression (XSLT 2.0)

Subject: Re: [xsl] Could not use matches in Regular Expression (XSLT 2.0)
From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx>
Date: Mon, 3 May 2010 09:10:54 +0200
On Mon, May 3, 2010 at 5:47 AM, Jack Bush <netbeansfan@xxxxxxxxxxxx> wrote:
>
> Gentlemen,
>
> Thank you very much for your suggestion that has worked perfectly.
>
> I did left out the single quotes in the following line:
>
> <xsl:when test="$TELEPHONE_AREA_CODE = 'FAIRYLAND'">
>
> It was a midnight cut-and-paste minor blunder.
>
> Btw, so if I want a combination of 2 pattern matching then it would be along
the line of the following:
>
>           matches( ., '^4\d{6}$ | ^6\d{5}$' ) or <xsl:if
test="matches(.,'^4\d{6}$') | matches(.,'^6\d{5}$')">

This could be a single pattern:
    '^(4\d{6}|6\d{5})$'


>           matches(., '^4[0-9]{6} | ^6[0-9]{5}') or <xsl:if
test="matches(.,'^4[0-9]{6}') | matches(.,'^6[0-9]{5}">
>
> At the sametime, is it possible to setup dependencies between multiple
pattern matches such as the following:
>
>           matches( ., '^4\d{6}$ & ^6\d{5}$' ) or <xsl:if
test="matches(.,'^4\d{6}$') & matches(.,'^6\d{5}$')">

There is no '&' (in this sense) in patterns, and it doesn't make
sense: A string cannot match both distinct, full range (i.e., from
^/start to $/end) at the same time. What is the spec, verbally?

-W

>           matches(., '^4[0-9]{6} & ^6[0-9]{5}') or <xsl:if
test="matches(.,'^4[0-9]{6}') & matches(.,'^6[0-9]{5}">
>
> ^6\d{5}$' won't be matched unless '^4\d{6} is matched? Likewise, the same
thing applies to '^4[0-9]{6} followed by ^6[0-9]{5}'?
>
> Many thanks again,
>
> Jack
>
>
> ----- Original Message ----
> From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx>
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Sent: Sun, 2 May, 2010 12:18:21 AM
> Subject: Re: [xsl] Could not use matches in Regular Expression (XSLT 2.0)
>
> The pattern must be a string, so enclose it in apostrophes. (Also,
> there is one opening bracket missing.) To have an exact match, use '^'
> and '$' to anchor at the beginning and the end. You may simplify using
> a repeat count (and \d for digit). All together now:
>
>    matches( ., '^4\d{6}$' )
>
> -W
>
> > On Sat, May 1, 2010 at 3:56 PM, Jack Bush <netbeansfan@xxxxxxxxxxxx>
wrote:
> >>
> >> Hi Forum members,
> >>
> >> I
> >> am new to XSLT 2.0 and would like to do the following basic numeric
string pattern
> >> matching using regular expression:
> >>
> >> <xsl:template match="ns:p[ns:strong='Telephones:']">
> >>  <xsl:choose>
> >>    < -- If global parameter $TELEPHONE_AREA_CODE equals to FAIRYLAND -->
> >>    <xsl:when test="$TELEPHONE_AREA_CODE = ''FAIRYLAND">
> >>      <xsl:for-each select="ns:a">
> >>      <-- Only accept the phone number that starts with 4 follow by six
digits....   --->
> >>        <xsl:if test="matches(.,4[0-9][0-9][0-9]0-9][0-9][0-9])">
> >>          <phone_number><xsl:value-of select='.'/></phone_number>
> >>        </xsl:if>
> >>      </xsl:for-each>/>
> >>  ......
> >>
> >> However, it is picking up phone numbers starting with 1 instead. Also
tried the starts-with() with the same outcomes.
> >>
> >> I am using JDK1.6.19, Netbeans 6.7, JDOM 1.1, Saxon 9.1 on Windows XP.
> >>
> >> Your assistance would be much appreciated.
> >>
> >> Thanks in advance,
> >>
> >> Jack

Current Thread