Re: Regular expression functions (Was: Re: [xsl] comments on December F&O draft)

Subject: Re: Regular expression functions (Was: Re: [xsl] comments on December F&O draft)
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Thu, 10 Jan 2002 12:47:53 +0000
David,

>   - introducing a syntax for naming the subexpressions rather than
>     numbering them
>
> this works surprisingly well in omnimark, although I thought it odd
> when I first saw it. It also allows you to grab nested strings
> rather than having to reconcatenate #1 #2 etc for example (in a
> mixture of omnimark and sed/perl syntax)

It does sound really neat - I always get lost about which bracket I'm
on in a regular expression!

The more I think about it, the less I like the
assignment-to-numerically-named-variables idea (which was mine in the
first place, I freely admit, but I think I'm allowed to change my mind
:)

An alternative that feels more XSLT/XPath-like is to have a function
that gives you access to the results of the match. It could return a
sequence of the matched strings (or positions or whatever), or another
idea would be to have the function operate over a sequence of
integers, with each integer giving the index of the subexpression from
the last.

To give you an idea about what I'm going on about, the signature of
the function I have in mind is:

  current-match(integer* $subexpression) => xs:string

say you had:

<xsl:regexp-template match="(([a-z])([a-z0-9]*))([?+*]?)">
  ...
</xsl:regexp-template>

(an identifier followed by an optional occurrence indicator).

Within the regexp-template you could use a current-match() function to
give you the results of the match. Say the overall matched string was:

  "foo?"

Then the valid calls to current-match() (and their results) would be:

  current-match(1)      => "foo"
  current-match(2)      => "?"
  current-match((1, 1)) => "f"
  current-match((1, 2)) => "oo"
  current-match(())     => "foo?"

This still involves counting brackets (which isn't easy), but at least
you won't usually have to count very many of them!
  
Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


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


Current Thread