Большинство объяснений регулярных выражений обычно показывают, что ожидаемое поведение заключается в использовании жадной оценки выражений слева направо. Однако в одной реализации 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, где последний результат будет считаться действительным?
Лучшая практика заключается в том, чтобы избежать использования ветвей, которые совпадают в одном месте. BTW, что такое процессор XQuery, который использует POSIX способ обработки чередования (второй)? –
@ WiktorStribiżew Без поисковых запросов, которые очень сложно сделать для ввода, с которым мне приходится иметь дело. Я могу быть вынужден реорганизовать выражение в гораздо более крупное или разбить его на этапы, чтобы обеспечить приоритет. Это на MarkLogic. – wst