在XSLT / XQuery正则表达式中,是否有评估交替表达式的必需顺序?

时间:2017-02-10 17:42:27

标签: regex xslt xpath xquery

正则表达式的大多数解释通常似乎表明预期的行为是从左到右使用表达式的贪婪评估。但是,在一个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的正则表达式规范有什么解释,后者的结果会被认为是有效的吗?

1 个答案:

答案 0 :(得分:3)

基于https://www.w3.org/TR/xpath-functions-31/#func-analyze-string

  

如果正则表达式中的几个替代项都匹配   输入字符串中的相同位置,然后是所选的匹配   是匹配的第一个选择。例如,如果输入   string是The quick brown fox jumps,正则表达式是   jump|jumps,然后选择的匹配为jump

我认为你发布的第一个结果是正确的,另一个产生第二个结果的处理器有一个错误。