xquery 中的正面回顾
Positive lookbehind in xquery
我正在 xQuery 中编写 Porter 词干提取器,作为第一步,我需要匹配辅音和元音模式。我用作此基础的 Perl 示例中的辅音匹配序列是 (?:[^aiueoy]|(?:(?<=[aiueo])y)|\by)
,元音序列是 (?:[aiueo]|(?:(?<![aiueo])y))
。我需要扩展它以包括字母 aesc (æ),这就是我的 xquery 正则表达式:
let $v := element {"vowels"} {matches($f,"(?:([^aiueoy])|(?:(?:[aiueo])y))")}
let $c := element {"consonants"} {matches($f,"(?:([aiueo])|(?:(?<![aiueo])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
我很确定我的问题是我没有正确构建正面回顾,将其从<=
到
,但我不确定如何以与 xQuery 一起使用的方式构建该方面。任何建议将不胜感激。
https://www.w3.org/TR/xpath-functions-31/#regex-syntax, noting that XPath and XQuery supports several additions to what the XML Schema Datatypes specification on regular expressions at https://www.w3.org/TR/xmlschema-2/#regexs 中描述了 XQuery 3.1 规范的正则表达式支持。不幸的是,lookbehind 支持不是规范的一部分。
但是,由于您注意到您正在使用 Saxon,Saxon 有一个扩展允许您启用本机 Java 正则表达式,如果您提供 j
标志,如 [=13] 中所述=].这应该可以让您访问 Java 对正后视表达式的支持。
(此 j
标志正在成为其他 XQuery 实现中的一种扩展约定。BaseX 遵循 Saxon,如 http://docs.basex.org/wiki/XQuery_Extensions#Regular_Expressions. eXist will likely adopt this convention too: https://github.com/eXist-db/exist/issues/846 所述。)
我正在 xQuery 中编写 Porter 词干提取器,作为第一步,我需要匹配辅音和元音模式。我用作此基础的 Perl 示例中的辅音匹配序列是 (?:[^aiueoy]|(?:(?<=[aiueo])y)|\by)
,元音序列是 (?:[aiueo]|(?:(?<![aiueo])y))
。我需要扩展它以包括字母 aesc (æ),这就是我的 xquery 正则表达式:
let $v := element {"vowels"} {matches($f,"(?:([^aiueoy])|(?:(?:[aiueo])y))")}
let $c := element {"consonants"} {matches($f,"(?:([aiueo])|(?:(?<![aiueo])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
我很确定我的问题是我没有正确构建正面回顾,将其从<=
到 ,但我不确定如何以与 xQuery 一起使用的方式构建该方面。任何建议将不胜感激。
https://www.w3.org/TR/xpath-functions-31/#regex-syntax, noting that XPath and XQuery supports several additions to what the XML Schema Datatypes specification on regular expressions at https://www.w3.org/TR/xmlschema-2/#regexs 中描述了 XQuery 3.1 规范的正则表达式支持。不幸的是,lookbehind 支持不是规范的一部分。
但是,由于您注意到您正在使用 Saxon,Saxon 有一个扩展允许您启用本机 Java 正则表达式,如果您提供 j
标志,如 [=13] 中所述=].这应该可以让您访问 Java 对正后视表达式的支持。
(此 j
标志正在成为其他 XQuery 实现中的一种扩展约定。BaseX 遵循 Saxon,如 http://docs.basex.org/wiki/XQuery_Extensions#Regular_Expressions. eXist will likely adopt this convention too: https://github.com/eXist-db/exist/issues/846 所述。)