【发布时间】:2017-09-26 13:23:02
【问题描述】:
查询:
select 1 "val" from dual where regexp_like('ITEM HEIGHT','^(?!ICON).*HEIGHT$');
上面的查询没有返回我1。请告诉我如何使用 oracle regexp_like() 实现负前瞻。
注意:请不要建议对查询进行任何更改,我很想知道regexp_like() 接受的正确正则表达式用于否定前瞻。此外 [^] 似乎仅逐个字符否定而不是整个字符串。
【问题讨论】:
-
不确定是不是你想要的,但如果你想否定值,试试这个:'a[^b]'
-
Oracle 正则表达式不支持前瞻。
-
我怀疑如果我必须排除一个字符串而不是一个字符怎么办?
-
不确定您是否在此期间了解了更多关于正则表达式的知识......在您的尝试中,插入符号实际上是字符串开头的锚点。由于未转义的括号是元字符,因此它后面的问号实际上是语法错误。甲骨文老大哥选择忽略这个错误——它只是忽略了问号。然后它继续匹配:它查找以
'!ICON'开头并包含多一个字符(换行符除外)和'HEIGHT'的字符串。 什么都没有关于排除任何东西!
标签: oracle negative-lookahead regexp-like