正则表达式的大多数解释通常似乎表明预期的行为是从左到右使用表达式的贪婪评估。但是,在一个XQuery实现中,我发现交替表达式是并行计算的(显然是为了性能),这意味着“第一个”匹配不一定是第一个从左边匹配。
例如,在我测试的每个其他XQuery处理器中,给出了这个输入:
fn:analyze-string(
'1-a. x. y. z.',
'^(\d+[-\w]*\.?|.{1,10}\.)\s(.+)$',
'ix')
返回相同的输出:
<analyze-string-result>
<match>
<group nr="1">1-a.</group>
<group nr="2">x. y. z.</group>
</match>
</analyze-string-result>
但是,有一个XQuery处理器(在第1组中)在第一个表达式之前计算第二个表达式,而是匹配:
<analyze-string-result>
<match>
<group nr="1">1-a. x. y.</group>
<group nr="2">z.</group>
</match>
</analyze-string-result>
对XQuery的正则表达式规范有什么解释,后者的结果会被认为是有效的吗?
答案 0 :(得分:3)
基于https://www.w3.org/TR/xpath-functions-31/#func-analyze-string说
如果正则表达式中的几个替代项都匹配 输入字符串中的相同位置,然后是所选的匹配 是匹配的第一个选择。例如,如果输入 string是
The quick brown fox jumps
,正则表达式是jump|jumps
,然后选择的匹配为jump
。
我认为你发布的第一个结果是正确的,另一个产生第二个结果的处理器有一个错误。