Re: [xsl] java Regex call

Subject: Re: [xsl] java Regex call
From: John Sharp <jsharp@xxxxxx>
Date: Thu, 10 Jul 2003 09:20:29 -0500
Jeni, Thank you for your reply.

> Of course you need to know what regular expression is being used to be
> able to tell which regex groups you're actually interested in...

Yes, I should have mentioned that in my case I will never know 
this, as the regex comes in a separate XML.

I'm really looking for examples of how the Java regex classes (or
any Java classes for that matter) are used as XSLT extensions.  I 
can run all the simple java.Date examples etc,. but when I need to 
start mixing object handles - as in the java Matcher and Pattern 
classes - I can't seem to get it working.

Is is better to create my own java wrapper class to hide the 
complexities ?

> By the way, I'm not sure why you're using "//" in $rule//@name 
Its a typo by me.

> If you're using Saxon 7.6, why not use the built-in regular expression
> support rather than Java extensions?

http://www.biglist.com/lists/xsl-list/archives/200201/msg00862.html
I didn't see any regex support on the 7.6 page, but I can follow 
this up on the saxon list.

Thanks again,

Kind regards, John,

Jeni Tennison wrote:
> 
> Hi John,
> 
> > Hi, Does anyone have an example of using the java.util.regex
> > functions to return the "components" of the regex that matched.
> [snip]
> > Also, I'm using the Saxon 7.6  processor.
> 
> If you're using Saxon 7.6, why not use the built-in regular expression
> support rather than Java extensions?
> 
> > Example: if my regex is defined as:-
> >
> >  (([^_]*)_PARA)|((.*?)(PARA)(.*?))
> >
> >  and my input is "ABC_PARA"
> >
> >  Then I need to know what portions of the input matched
> >  each (if any) part of the regex groups, ([^_]*) and (.*?) etc,.
> >  in terms of group number and matching string.
> 
> If you use <xsl:analyze-string> then within the
> <xsl:matching-substring>, the regex-group() function gives you access
> to the values of the regex groups. Try:
> 
>   <xsl:for-each select="$rule//Type">
>     <xsl:variable name="tdlType" select="." />
>     <xsl:analyze-string select="." regex="{$regex}">
>       <xsl:matching-substring>
>         <RULE_MATCH>
>           <xsl:value-of select="$rule//@name" />
>         </RULE_MATCH>
>         <REGEX><xsl:copy-of select="$regex" /></REGEX>
>         <GROUP1><xsl:value-of select="regex-group(1)" /></GROUP1>
>         <GROUP2><xsl:value-of select="regex-group(2)" /></GROUP2>
>         <GROUP3><xsl:value-of select="regex-group(3)" /></GROUP3>
>         ...
>       </xsl:matching-substring>
>     </xsl:analyze-string>
>   </xsl:for-each>
> 
> Of course you need to know what regular expression is being used to be
> able to tell which regex groups you're actually interested in...
> 
> By the way, I'm not sure why you're using "//" in $rule//@name -- this
> will return all the name attributes of all the elements that are
> descendants of $rule, as well as of $rule itself, and return them in a
> whitespace-separated list (this being XSLT 2.0). Is that what you
> really want?
> 
> Cheers,
> 
> Jeni
> 
> ---
> Jeni Tennison
> http://www.jenitennison.com/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread