2011-01-10 3 views
2

저는 Oracle Regular Expression을 사용하고 있습니다. 일부 문자열을 일치시키고 다른 문자열과 다른 문자열을 일치시키고 싶습니다.Regex to match test <not ABC> 테스트

예를 들어 'testZZZtest'와 'testAAAestest'는 일치하지만 'testABCtest'또는 'test bla bla ABC bla bla test'는 일치하지 않습니다. 에서와 같이

내가 패턴을 시도하고있다 '[^ ABC] * 테스트 테스트'

select regexp_instr('bla bla bla testAZZtest bla bla bla', 'test[^ABC]*test') from dual 

하지만 일을 does't (이 답변 0, 일치하지 않는 것을 의미).

select regexp_instr('bla bla bla testZZZtest bla bla bla', 'test[^ABC]*test') from dual 

내가 원래 문자열에서 testZZZtest의 위치입니다 대답 (13)을 얻었다 : 내가하려고하면 때문에 'AZZ'에서 'A'는 문제 것 같다.

확실히 누락되었지만 문제를 찾을 수 없습니다. 부정적 예측에 대한 몇 가지 정보를 원하시면 보았다,하지만 난 오라클에서 작동하지 않는 구문을 가지고 :

http://www.regular-expressions.info/lookaround.html

+0

오라클이 고유 한 정규식 구문을 작성하지 않는 한, [[^ ...]은 (는) 부정 된 문자 그룹입니다. 즉, 줄임표 대신 지정된 하나의 문자와 일치합니다. – delnan

답변

2

이 시도 : 당신의 시도에서

test([^A].*|.[^B].*|..[^C].*)test 

, [^ABC]* 일치하는 0 개 이상의 문자를 그 A, B 또는 C가 아닙니다. 이는 ZZZ (A, B 또는 C가 없음)과 일치하지만 AZZ (A가 있음)과 일치하지 않는 이유를 설명합니다.

+0

작동하지 않습니다. ((testAZZtest와 일치하지 않습니다.) – caraca

+0

@caraca 죄송합니다. 그건 내 실수였습니다. 위의 업데이트는 [테스트되었습니다] (http://www.rubular.com/r/IDI8v5GlyL) – marcog

+0

@marcog !! 이제 제대로 작동합니다! – caraca