Re: [xsl] Need an XPath expression which returns all xs:pattern elements containing a regex that permits an unbounded number of characters

Subject: Re: [xsl] Need an XPath expression which returns all xs:pattern elements containing a regex that permits an unbounded number of characters
From: "David Carlisle d.p.carlisle@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 4 Apr 2024 14:20:19 -0000
On Thu, 4 Apr 2024 at 14:48, Willem Van Lishout willemvanlishout@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> Is this even possible, theoretically speaking? As soon as you start using
> lookaheads, square brackets, and so on, your patterns will likely fail. I
> don't think regex can parse regex.
>



I don't think the regex needs to be parsed here: you can destructively
normalise it before testing eg
replace ( replace(replace(,.'\s','') , '\\.' , 'x'), `\{-0-9]*,\}`,'*`)

would get rid of all white space, replace  \-quoted characters by x and  a{
99, } constructs by a*
which should simplify looking for * and +

David


> 4 Apr 2024, at 20:15, "David Carlisle d.p.carlisle@xxxxxxxxx" <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>
>>
>>
>> On Thu, 4 Apr 2024 at 13:29, Roger L Costello costello@xxxxxxxxx <
>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>
>>> Hi Folks,
>>>
>>> I want to find, in an XML Schema, all xs:pattern elements containing a
>>> regex that permits an unbounded number of characters.
>>>
>>> Here are examples of xs:pattern elements that I want to find:
>>>
>>> <xs:pattern value="A*"/>
>>> <xs:pattern value="A+"/>
>>> <xs:pattern value="A{0,.}"/>
>>> <xs:pattern value="A{1,.}"/>
>>>
>>>
>>> How to fix my XPath expression? Is the solution to add a second
>>> predicate:
>>>
>>> xs:pattern[
>>>         contains(@value, '*') or
>>>         contains(@value, '+') or
>>>         contains(@value, '{1,}') or
>>>         contains(@value, '{0,}')
>>>     ][
>>>         not(contains(@value, '\*')) and
>>>         not(contains(@value, '\+'))
>>>     ]
>>>
>>> Is that correct?
>>>
>>>
>> No.
>>
>> A  pattern \\*   matches an unbounded list of backslashes  but fails your
>> test as it contains \*
>> A pattern X{5,}  matches an unbounded list  of X of at least 5 but
>> doesn't match your first predicate.
>>
>>
>>
>>
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/3166594> (by
>> email)
>>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/2739265> (by
> email <>)

Current Thread