use*_*301 2 oracle negative-lookahead regexp-like
查询:
select 1 "val" from dual where regexp_like('ITEM HEIGHT','^(?!ICON).*HEIGHT$');
Run Code Online (Sandbox Code Playgroud)
上面的查询没有返回我1。请让我知道如何使用oracle实现负前瞻regexp_like()。
注意:请不要在查询中提出任何建议,我很想知道正确的正则表达式可以接受regexp_like()否定超前。而且[^]似乎只逐个字符地求反,而不是整个字符串。
正如其他人提到的,Oracle正则表达式不直接支持零宽度断言。
在某些情况下,您可以将要检查的内容拆分为多个表达式。对于您给出的示例,您可以执行以下操作:
select 1 "val"
from dual
where NOT regexp_like('ITEM HEIGHT','^ICON')
and regexp_like('ITEM HEIGHT','HEIGHT$');
Run Code Online (Sandbox Code Playgroud)
如果确实需要在单个表达式中执行此操作,则可以使用字符类交替使用来一次检查一个字母,如下所示:
select 1 "val"
from dual
where regexp_like('ITEM HEIGHT','^([^I]|I[^C]|IC[^O]|ICO[^N]).*HEIGHT$');
Run Code Online (Sandbox Code Playgroud)
基本上,该表达式的第一部分是检查以下内容:
显然,这种方法很快会很麻烦,但是在某些情况下仍然有用。