查询:
select 1 "val" from dual where regexp_like('ITEM HEIGHT','^(?!ICON).*HEIGHT$'); 上面的查询没有返回1。请告诉我如何使用oracle regexp_like()实现负向先行。
注意:请不要在查询中建议任何更改,我有兴趣知道正确的正则表达式是被regexp_like()接受的负向先行。另外,^似乎只对一个字符求反,而不是对整个字符串求反。
发布于 2018-07-24 03:31:53
正如其他人所提到的,Oracle正则表达式不直接支持零宽度断言。
在某些情况下,您可以将您尝试检查的内容拆分到多个表达式中。对于您给出的示例,您可以这样做:
select 1 "val"
from dual
where NOT regexp_like('ITEM HEIGHT','^ICON')
and regexp_like('ITEM HEIGHT','HEIGHT$');如果您确实需要在单个表达式中执行此操作,则可以使用字符类交替来一次检查一个字母,如下所示:
select 1 "val"
from dual
where regexp_like('ITEM HEIGHT','^([^I]|I[^C]|IC[^O]|ICO[^N]).*HEIGHT$');基本上,这个表达式的第一部分是检查:
<
显然,这种方法很快就会变得很麻烦,但在某些情况下它仍然是有用的。
发布于 2017-09-26 22:03:24
Oracle不支持正则表达式中的先行处理-相反,您可以只检查下一个字符不是您想要排除的字符:
select 1 "val"
from dual
where regexp_like('ac','a([^b]|$)'); https://stackoverflow.com/questions/46427782
复制相似问题