正則表達式的大多數解釋通常似乎表明,預期的行爲是使用從左到右的表達式的貪婪評估。然而,在一個XQuery實現中,我發現交替表達式是並行計算的(顯然是爲了性能),這意味着「第一個」匹配不一定是左邊的匹配的第一個。在XSLT/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的正則表達式規範的解釋,後者的結果會被認爲是有效的?
最佳做法是避免使用在相同位置匹配的分支。順便說一句,什麼是XQuery處理器使用POSIX處理變化(第二個)的方式? –
@WiktorStribiżew沒有了我不得不處理的輸入很難做到的事情。我可能會被迫將表達方式重構爲更大的表達式,或者將其分成若干階段來強制執行優先級。這在MarkLogic上。 – wst