【发布时间】:2016-08-28 11:02:15
【问题描述】:
我想匹配字符串中的所有字符,直到遇到以下子字符串之一:
'='
'+%'
'-%'
我没有问题否定一组单个字符(即 [^=+-]),我可以用
肯定匹配字符串(=|\+%|-%)
但我似乎无法弄清楚否定集合的语法。有什么建议吗?
【问题讨论】:
我想匹配字符串中的所有字符,直到遇到以下子字符串之一:
'='
'+%'
'-%'
我没有问题否定一组单个字符(即 [^=+-]),我可以用
肯定匹配字符串(=|\+%|-%)
但我似乎无法弄清楚否定集合的语法。有什么建议吗?
【问题讨论】:
单独使用 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
【讨论】: