Oracle regexp模式匹配的实例,但不匹配ab

Oracle regexp模式匹配的实例,但不匹配ab,regex,oracle,regex-negation,Regex,Oracle,Regex Negation,我从oracle文档中看到,我可以做a | b,它将匹配字符“a”或字符“b”的所有实例。我想知道在regexp中是否可以有“a”而不是“b”,例如,匹配“a”的所有实例,但a后面跟着“b”的情况除外 所以用这三根弦 AAAA 阿卡德 AAAB 我想匹配1和2,但不是3。您可以尝试: with x as ( select 'AAAA' as str from dual union all select 'ACAD' as str from dual union all sel

我从oracle文档中看到,我可以做a | b,它将匹配字符“a”或字符“b”的所有实例。我想知道在regexp中是否可以有“a”而不是“b”,例如,匹配“a”的所有实例,但a后面跟着“b”的情况除外

所以用这三根弦

AAAA 阿卡德 AAAB 我想匹配1和2,但不是3。

您可以尝试:

with x as (
  select 'AAAA' as str from dual
  union all
  select 'ACAD' as str from dual
  union all
  select 'AAAB' as str from dual
)
select * from x
where regexp_like(str, '[aA][^bB]')
and NOT regexp_like(str, '[aA][bB]')
输出:

AAAA
ACAD
注意:如果您不关心A后面是否有其他非B字符,您可以简单地执行以下操作:

with x as (
  select 'AAAA' as str from dual
  union all
  select 'ACAD' as str from dual
  union all
  select 'AAAB' as str from dual
)
select * from x
where regexp_like(str, '[aA]')
and NOT regexp_like(str, '[aA][bB]')

哪个匹配AAAA或XYZA

3 AAAB不匹配A后面跟着非B的位置吗?AA的第一部分“a”而不是“b”与“a”后面跟着“b”的地方不同。字符串“ba”不满足条件['a'而不是'b',因为它确实有一个'b',但它不在'a'之后。请澄清。另外,如果您真的是指follow-这是指立即follow,还是指在字符串中后面的某个位置follow,不一定紧跟在“a”之后?您只需要检查字符串中是否没有AB,col不象“%AB%”和col象“%a%”其中的第一个条件不是过多;OP没有说他需要一个A,然后是其他的。实际上,A可以位于字符串的末尾,甚至整个字符串都可以是“A”。