regexp_substr中的字符串负匹配集

时间:2016-05-03 11:55:47

标签: oracle11g regex-negation

我希望匹配字符串中的所有字符,直到我点击以下子字符串之一:

'='
'+%'
'-%'

我没有问题否定一组单个字符(即[^ = + - ]),我可以正确匹配字符串

(=|\+%|-%) 

但我似乎无法弄清楚否定集合的语法。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

单独使用REGEXP_SUBSTR无法做到这一点,但这里有一个选项:

with temp as
(
  select 'TEST1=TEST1' test1 from dual union all
  select 'TEST2+%TEST2' test1 from dual union all
  select 'TEST3+TEST3' test1 from dual union all
  select 'TEST4-%TEST4' test1 from dual union all
  select 'TEST5-TEST5' test1 from dual
)

  SELECT test1,
         CASE
           WHEN REGEXP_INSTR(test1, '+%|=|-%') = 0 THEN test1
           ELSE REGEXP_REPLACE(SUBSTR(test1, 1, REGEXP_INSTR(test1, '-%|+%|=')), '[-=+%]')
           END
         result

  FROM temp