Regex xquery中的正向查找

Regex xquery中的正向查找,regex,regex-lookarounds,xquery-3.0,xquery-3.1,Regex,Regex Lookarounds,Xquery 3.0,Xquery 3.1,我正在用xQuery编写波特词干分析器,作为第一步,我需要匹配辅音和元音模式。我使用的Perl示例中的辅音匹配序列是(?:[^aiueoy]|)(?:(?)? 让$v:=元素{“元音”}{匹配($f,(?:([^aiueoy])|(?:(?:[aiueo]\1)y))} 让$c:=元素{“consonates”}{匹配($f,”(?:([aiueo])|)(?:(?中描述了XQuery 3.1规范的正则表达式支持,注意XPath和XQuery支持对位于的正则表达式上的XML模式数据类型规范的一些

我正在用xQuery编写波特词干分析器,作为第一步,我需要匹配辅音和元音模式。我使用的Perl示例中的辅音匹配序列是
(?:[^aiueoy]|)(?:(?)?
让$v:=元素{“元音”}{匹配($f,(?:([^aiueoy])|(?:(?:[aiueo]\1)y))}

让$c:=元素{“consonates”}{匹配($f,”(?:([aiueo])|)(?:(?中描述了XQuery 3.1规范的正则表达式支持,注意XPath和XQuery支持对位于的正则表达式上的XML模式数据类型规范的一些添加。不幸的是,lookbehind支持不是规范的一部分

但是,由于您注意到使用的是Saxon,因此Saxon有一个扩展,允许您在提供
j
标志时启用本机Java正则表达式,如中所述。这将使您能够访问Java对正向查找表达式的支持


(此
j
标志正在成为其他XQuery实现中的一种扩展约定。BaseX遵循Saxon,如中所述。eXist也可能采用此约定:)

我不认为XQuery既不支持非捕获组也不支持lookbehind。我对您试图用
\1
反向引用引用引用的内容感到困惑,您是否可以添加预期的XML输出?我还认为您的XQuery代码中有倒元音和辅音,否则我也不明白您为什么要匹配
[aiueo]
作为辅音和
[^aiueo]
如果可能的话,我建议使用XQuery以外的另一种语言来完成这项工作,它的正则表达式支持是有限的,看起来您的大部分工作是文本处理,而XML处理是次要的。感谢您指出这一点。我实际上已经访问了您提到的Saxon页面(这就是为什么我非常确定非捕获组现在可以了),但我错过了那个标志。我要试试看。
let $v := element {"vowels"} {matches($f,"(?:([^aiueoy])|(?:(?:[aiueo]\1)y))")}
let $c := element {"consonants"} {matches($f,"(?:([aiueo])|(?:(?<![aiueo]\1)y))")}
<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>