我正在寻找一种方法来否定 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/