Subject: Re: [xsl] xslt 2.0 regex|
From: davep <davep@xxxxxxxxxxxxx>
Date: Sat, 17 Mar 2012 18:01:22 +0000
Both XSLT 1.0 and 2.0 define variable names as QNames, so they *can* have a ":" in them.
Agreed. My misread of the spec. Tks Brandon.
Ignoring that for the moment, though, Tony pointed out one consequence of this, but the bigger issue is that the "|" operator in regex is fairly low precedence, so you often need some parenthesis around the list of alternatives to get things right. Your NameStartChar.re has a hex-char-ref-encoded "$" at the beginning, so that regex is actually "$[A-Z] | _ | [a-z] | ...", which means it will match "(a dollar sign followed by an upper-case English letter) or (an underscore) or (a lower-case English letter) or ...".
Actually, it might not even match that, since the "$" is a special character in regex, so you should escape it with a backslash to match it literally (though I think there are some rules which allow it to match literally even without the backslash, depending on what follows it, but best to be explicit).
All that said, I got this to work by dropping the "$" from the start of NameStartChar.re and changing Name.re to:
concat("\$(", $NameStartChar.re, ")(", $NameChar.re,")*")
presumably because $ is within the a-z grouping.... Yes it works.
-- Dave Pawson XSLT XSL-FO FAQ. http://www.dpawson.co.uk