Позитивный взгляд позади в xquery - PullRequest
0 голосов
/ 28 сентября 2018

Я пишу стеммер Porter в 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>

При выполнении этого в Saxon, однако, я получаю следующую ошибку: Query failed with dynamic error: Syntax error at char 17 in regular expression: No expression before quantifier Я почти уверен, что моя проблема в том, что я не правильно строю позитивный взгляд, изменив его с <= до \1, но я не уверен, как бы я построил этот аспект так, чтобы он работал с xQuery.Любые предложения будут высоко оценены.

1 Ответ

0 голосов
/ 28 сентября 2018

Поддержка регулярных выражений спецификации XQuery 3.1 описана в https://www.w3.org/TR/xpath-functions-31/#regex-syntax,, отмечая, что XPath и XQuery поддерживают несколько дополнений к тому, что спецификация типов данных XML-схемы для регулярных выражений в https://www.w3.org/TR/xmlschema-2/#regexs. К сожалению, поддержка lookhehind нечасть спецификации.

Однако, поскольку вы заметили, что используете Saxon, у Saxon есть расширение, которое позволяет вам включить нативное регулярное выражение Java, если вы установите флаг j, как описано в https://www.saxonica.com/html/documentation/functions/fn/matches.html. Это должно дать вам доступ к поддержке Java положительных выражений в виде заглядывания назад.

(Этот флаг j становится своего рода соглашением о расширении среди других реализаций XQuery. BaseX следует за Saxon, как отмечено в http://docs.basex.org/wiki/XQuery_Extensions#Regular_Expressions. eXist, вероятно, также примет это соглашение: https://github.com/eXist-db/exist/issues/846.)

...