我需要一个关于正则表达式(oracle)中的排除案例的紧急帮助。
主要的正则表达方式是:
1([^4][:;]|[0-9][^:;].*)
我需要修改或增强此正则表达式,以便排除特定字符串“1013;”但无法实现。我一直在寻找解决方案两天,但找不到任何在甲骨文中有效的方法。
最流行的解决方案替代方法(?!stringToExclude)Regexp在oracle中不起作用。 (我的版本:Oracle Database 11g企业版版本11.2.0.2.0 - 64位生产)
你对这个问题有什么看法吗?我怎样才能克服这个问题?
我的测试sql语句检查新regexp的验证是:
select regexp_substr('1013;', '1([^34][:;]|[0-9][^:;].*)') from dual --> returns 1013;
select regexp_substr('10133;', '1([^34][:;]|[0-9][^:;].*)') from dual --> returns 10133;
select regexp_substr('1013;', 'to be regexp') from dual --> should return nothing
select regexp_substr('1013', 'to be regexp') from dual --> should return nothing
select regexp_substr('1013:', 'to be regexp') from dual --> should return nothing
select regexp_substr('10133;', 'to be regexp') from dual --> should return 10133;
答案 0 :(得分:1)
尝试使用regexp无法找到的字符串替换要排除的字符串。 e.g
with str as
(
select '1013;' as s from dual
union
select '1013' from dual
union
select '1013:' from dual
union
select '10133;' from dual
)
select
s
, regexp_substr(s, '1([^34][:;]|[0-9][^:;].*)') --> regexp
, regexp_replace(s,'^1013($|:|;)','x') --> replaced string
, regexp_substr(regexp_replace(s,'^1013($|:|;)','x')
, '1([^34][:;]|[0-9][^:;].*)') --> regexp with replaced string
from
str
;