regex - xquery 中的正向回顾

标签 regex regex-lookarounds xquery-3.0 xquery-3.1

我正在 xQuery 中编写 Porter 词干分析器,作为第一步,我需要匹配辅音和元音模式。我用作此基础的 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我很确定我的问题是我没有正确构建积极的lookbehind,将其从 <= 更改为至\1 ,但我不确定如何以与 xQuery 配合使用的方式构建该方面。任何建议将不胜感激。

最佳答案

XQuery 3.1 规范的正则表达式支持在 https://www.w3.org/TR/xpath-functions-31/#regex-syntax 中进行了描述。 ,注意到 XPath 和 XQuery 支持对正则表达式的 XML 模式数据类型规范的多项补充,网址为 https://www.w3.org/TR/xmlschema-2/#regexs 。不幸的是,后向支持不是规范的一部分。

但是,由于您注意到您正在使用 Saxon,因此 Saxon 有一个扩展,如果您提供 j 标志,则可以启用 native Java 正则表达式,如 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 。)

关于regex - xquery 中的正向回顾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558237/

相关文章:

java - 查找恰好(或至少)有一个换行符的 n 个字符

python - 如何在正则表达式中使用 'lookaround' 和字符时捕获整个字符串?

xml - XQuery 从 XML 文件中删除属性 onlyChannels ="print"的所有元素

xquery - 如何使用 xslt-xquery-serialization 命名空间导出到 JSON

mysql - 如何从 mysql 中的字符串中选择一个精确的子字符串而不是另一个?

regex - Vim 搜索和替换查询

android - 如何使用 android 正则表达式匹配字符串中的非数字字符?

javascript - 正则表达式删除第一个括号之后和最后一个括号之前的空格

python - 使用前瞻进行正则表达式分组(在 Python 中)

recursion - 递归包装一个元素