RE: [xsl] Comments in XPath / XSLT regular expressions?

Subject: RE: [xsl] Comments in XPath / XSLT regular expressions?
From: "Colin Adams" <colinpauladams@xxxxxxxxxxx>
Date: Wed, 26 Jul 2006 09:58:20 +0100
Regular expressions aren't pretty or readable at the best of time, IMHO.

Your idea of using concat combined with XPath comments seems to me to be as good as you might
hope for.


But you could always write an xsl:function with zero arguments returning an xs:string.
That way you can name your regular expression, and use commenting techiniques within the body of the function.


You could then group a set of named regular expressions in a module to be xsl:include/imprted.

From: Abel Braaksma Online <abel.online@xxxxxxxxx>

The regular expression syntax used in XSLT and XPath is largely based on Perl's regular expression syntax. Perl added a very useful construct to their regular expression dialect: the /x modifier. It gives "whitespace freedom" and allows for comments inside regular expressions. It was a great enhancement at the time, especially for moderate to difficult regexes.

I've been reading through the regex chapter of the XPath 2.0 Programmer's Reference, hoping for something similar, but it wasn't mentioned. I know there's the smiley-comment syntax for XPath, but it does not work inside a regex. Unfortunately, the old, pre-/x time, way seems the only way: dissecting the regex in strings and concatenating it back again. I don't think this is right, or even adds to readability though. Does anybody know of a way to add comments and whitespace to regular expressions? Much like the /x modifier? Or should I add some preparser van normalize-space? That won't be trivial, I think.

This is the best I could think of for the moment (example takes a filepath and gets the filename part out and adds .xml, there are flaws in the reqex, I know ;)

select="replace(., concat('^.*?', (: non-greedy: grab everything :)
'([^/\\]+)', (: the last part of the path: does not contain (back)slashes. Grab it to $1 :)
'\.', (: the dot separating the extension from the filename :)
'[^\.]*$' (: not-a-dot until end of string, this is the extension :)
), '$1.xml')" />


But it ain't very pretty with all them quotes and comma's, ain't it? ;)

Anyone any ideas?

_________________________________________________________________
Windows Live Messenger has arrived. Click here to download it for free! http://imagine-msn.com/messenger/launch80/?locale=en-gb


Current Thread