Позитивный взгляд позади в xquery
Я пишу портер Steter в xQuery, и в качестве первого шага мне нужно сопоставить паттерны согласных и гласных. Согласующая последовательность соответствия из примера Perl, который я использую в качестве основы для этого, (?:[^aiueoy]|(?:(?<=[aiueo])y)|\by)
и последовательность гласных (?:[aiueo]|(?:(?<![aiueo])y))
, Мне нужно расширить это, чтобы также включить букву aesc (æ), и вот что я имею для своего регулярного выражения xquery:
let $v := element {"vowels"} {matches($f,"(?:([^aiueoy])|(?:(?:[aiueo]\1)y))")}
let $c := element {"consonants"} {matches($f,"(?:([aiueo])|(?:(?<![aiueo]\1)y))")}
Вот пример типа XML, который я ищу:
<entry ref="173">
<headword>abǒve</headword>
<headword>abǒven</headword>
<variant>abufe</variant>
<variant>abufen</variant>
<variant>abuue</variant>
<variant>abuuen</variant>
<variant>abowve</variant>
<variant>obove</variant>
<variant>oboven</variant>
<variant>obufe</variant>
<variant>obufen</variant>
<variant>abof</variant>
<variant>obof</variant>
<variant>aboyf</variant>
<variant>aboun</variant>
<variant>aboune</variant>
<variant>abown</variant>
<variant>abowne</variant>
<variant>aboon</variant>
<variant>oboun</variant>
<variant>oboune</variant>
<variant>abow</variant>
<variant>aboʒe</variant>
<part_of_speech> adv. </part_of_speech>
</entry>
Запустив это в Саксонии, я получаю следующую ошибку: Query failed with dynamic error: Syntax error at char 17 in regular expression: No expression before quantifier
Я почти уверен, что моя проблема в том, что я не выстраиваю позитивный взгляд сзади, изменив его <=
в \1
, но я не уверен, как бы я построил этот аспект таким образом, который работает с xQuery. Любые предложения будут высоко ценится.
1 ответ
Поддержка регулярных выражений спецификации XQuery 3.1 описана по адресу https://www.w3.org/TR/xpath-functions-31/, где отмечается, что XPath и XQuery поддерживают несколько дополнений к тому, что спецификация типов данных XML-схемы в регулярных выражения на https://www.w3.org/TR/xmlschema-2/. К сожалению, поддержка просмотра назад не является частью спецификации.
Тем не менее, поскольку вы заметили, что используете Saxon, Saxon имеет расширение, которое позволяет вам включить нативное регулярное выражение Java, если вы предоставите j
флаг, как описано в https://www.saxonica.com/html/documentation/functions/fn/matches.html. Это должно дать вам доступ к поддержке Java положительных выражений за кадром.
(Это j
Флаг становится своего рода соглашением о расширении среди других реализаций XQuery. BaseX следует Саксону, как отмечено на http://docs.basex.org/wiki/XQuery_Extensions. eXist, вероятно, также примет это соглашение: https://github.com/eXist-db/exist/issues/846.)