regex - XQuery 否定正则表达式

标签 regex oracle xquery

我正在寻找一种方法来否定 xquery 中的正则表达式。 将 Oracle 与 XMLQuery 函数结合使用。

我先举个例子:

XMLQuery(
    'for $number in ("2a2", "32", "1234", "12", "32a3", "")
    where ora:matches($number,"^[0-9]{4}$")

    return xs:integer($number)'
    passing xml RETURNING CONTENT
    )

除一件事外,这工作完美。我想得到与模式不匹配的完全相反的条目。

我试过了

where fn:not(ora:matches($number,"^[0-9]{4}$"))
where ora:matches($number,"^[0-9]{4}$") = false()
where ora:matches($number,"^[0-9]{4}$") = fn:false()

这都给我这个

ORA-01722: Ungültige Zahl 01722. 00000 - “无效号码” *原因:指定的号码无效。 *行动:指定一个有效的数字。

最佳答案

只需使用这个纯 XPath 2.0 表达式(XPath 2.0 是 XQuery 的一个真子集):

("2a2", "32", "1234", "12", "32a3", "12345", "")
                      [not(matches(., "^[0-9]{4}$"))]

当这个表达式被计算时(在 XQuery、XSLT 2+ 或任何独立的 XPath/XQuery 解释器工具中),产生了想要的、正确的结果:

2a2 32 12 32a3 12345

可以进一步简化这个:

("2a2", "32", "1234", "12", "32a3", "12345", "")
                      [not(matches(., "^\d{4}$"))]

关于regex - XQuery 否定正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32993708/

相关文章:

xml - 如何使用FLWOR的XQuery返回一系列XML节点?

java - 用于定义类似于 XQuery 或 SQL 语句的规则和操作的 UI

regex - 根据文件名使用 bash 和 Perl 批量重命名文件

regex - 如何在Windows中使用findstr返回具有匹配子字符串的字符串

regex - 匹配 X-Forwarded-For header 中的最后一个非私有(private) IP 地址

oracle - PL/SQL 检查日期是否有效

sql - 比较 Oracle SQL 中的空值

regex - Perl6从字符串获取正则表达式

mysql - 规范化数据库以减少依赖性

sql - Xquery 从属性中获取值