2013-08-14 3 views
1

정규식 (oracle)에서 제외 사례에 대한 긴급한 도움이 필요합니다.oracle의 정규 표현식에서 특정 문자열/패턴을 제외하는 방법은 무엇입니까?

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

내가 수정하거나 spesific 문자열 제외하기 위해이 정규 표현식을 향상시키기 위해 필요 "(1013),"

주요 정규 표현식이다 그러나 그것을 성취 할 수 없었다. 나는 2 일 동안 해결책을 찾고 있었지만 오라클에서 작동하는 것을 찾을 수 없었다.

대체 솔루션 (?! stringToExclude) Regexp가 oracle에서 작동하지 않습니다. (가지고있는 버전 : Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production)

이 문제점에 대해 알고 계십니까? 어떻게이 문제를 극복 할 수 있습니까?

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

오라클의 정규 표현식은 아직까지 (11gR2)의 미리보기를 지원하지 않습니다. –

답변

1

시도는 당신이 당신의 정규 표현식에 의해 발견되지 않을 것이다 문자열로 제외 할 문자열을 대체하기 위해 : 새로운 정규 표현식의 유효성을 확인

내 테스트 SQL 문는 점이다. 예 :

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 
; 
+0

@schurik .... 우선 빠른 응답을 주셔서 감사합니다. 정규식을 구성 테이블에서 추출하여 regexp를 SQL 문으로 바꿀 수는 없습니다. 내가 목표로해야 할 일은 "1013 [ '';:]"을 제외하기 위해이 정규 표현식을 다시 쓰는 것입니다. 빈센트가 말했듯이, 미리보기 구조로는이를 달성 할 수 없습니다. 그렇다면 어떤 종류의 솔루션이나 정규 표현식이 효과가 있을까요? – mozbak

관련 문제