Hi Roger,
(?:) will give you a non-capturing group:
([0-9]+(?:\s+thru\s+[0-9]+)?)
but its match contents will still be a part of the outer group.
- Chris
-----Original Message-----
From: Roger L Costello costello@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Wednesday, May 24, 2023 7:00 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: How to escape the normal interpretation of parentheses when
utilizing regex-group()?
Hi Folks,
My input consist of lines of text. Here is a sample input:
1 Record Type
The XSLT program is to transform that line into this XML:
<column>1</column>
<field-name>Record Type</field-name>
Here is another sample input:
2 thru 4 Customer/Area Code
The XSLT program is to transform that line into this XML:
<column>2 thru 4</column>
<field-name>Customer/Area Code</field-name>
I figured that <xsl:analyze-string and regex-group() would be suitable for
breaking apart each line.
What regex to use for column? The value of column is an integer followed
optionally by "thru" and another integer. I figured this regex should do the
job:
([0-9]+(\s+thru\s+[0-9]+)?)
But, but, but, ....
regex-group(1) means that whole regex. So with this input:
2 thru 4 Customer/Area Code
regex-group(1) matches:
2 thru 4
Perfect.
Unfortunately, regex-group(2) matches the inner, optional part. So I end up
with this:
<column>2 thru 4</column>
<field-name> thru 4</field-name>
Eek!
Wrong.
How to solve this problem? Is there a way to specify that the inner, optional
part:
(\s+thru\s+[0-9]+)?
belongs only to regex-group(1), not to regex-group(2)?
Stated another way, is there a way to indicate that the parentheses in the
inner, optional part are not to be considered as regex-group() syntax?
Stated still another way, is there a way to "escape" the normal interpretation
of parentheses when utilizing regex-group()?
/Roger
|