Re: [xsl] Escaping Curly Braces in Regex

Subject: Re: [xsl] Escaping Curly Braces in Regex
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Thu, 01 Oct 2009 14:01:17 +0200
rowan@xxxxxxxxxxxxxxxxxxxxx wrote:

I found it very confusing that one requires the {} to be doubled and the
other doesn't. Where is it documented which attributes require braces to be
doubled up and which do not?

If you look at http://www.w3.org/TR/xslt20/#analyze-string then it has the following definition:

<xsl:analyze-string
select = expression
regex = { string }
flags? = { string }>
<!-- Content: (xsl:matching-substring?, xsl:non-matching-substring?, xsl:fallback*) -->
</xsl:analyze-string>


so the attribute definition in the form of
  regex = { string }
shows you that an attribute value template is expected while
  select = expression
only takes an XPath expression.

There is even a prose warning note in there:

Because the regex attribute is an attribute value template, curly brackets within the regular expression must be doubled. For example, to match a sequence of one to five characters, write regex=".{{1,5}}". For regular expressions containing many curly brackets it may be more convenient to use a notation such as regex="{'[0-9]{1,5}[a-z]{3}[0-9]{1,2}'}", or to use a variable.

--

	Martin Honnen
	http://msmvps.com/blogs/martin_honnen/

Current Thread