1

我需要有关正则表达式(oracle)中排除情况的紧急帮助。

主要的正则表达式是:

1([^4][:;]|[0-9][^:;].*)

我需要修改或增强此正则表达式以排除特定字符串“1013;” 但无法实现。我已经搜索了两天的解决方案,但找不到任何在 oracle 中有效的方法。

最受欢迎的替代解决方案 (?!stringToExclude)Regexp 在 oracle 中不起作用。(我拥有的版本:Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production)

你对这个问题有什么想法吗?我该如何克服这个问题?

我的测试 sql 语句检查新正则表达式的验证是:

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;
4

1 回答 1

1

尝试用您的正则表达式找不到的字符串替换您要排除的字符串。例如

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
;
于 2013-08-14T09:05:03.863 回答