Subject: Re: 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
|