2015-02-02 3 views
2

정규식에 도움이 필요합니다. 이 코드는 SQL에 있으며 프록시 데이터베이스를 참조하지 않는 모든 문자열과 일치 시키려고합니다.단어가 있지만 특정 단어가 들어 있지 않습니다.

패턴은 다음과 같습니다 는 ..을 포함하고 이전에 말씀이 내가 아래 예제 단어 customer 일치 싶습니다 proxy

같지 않은 :

from proxy..vw_xxx a join customer..vw_xxx b 
from proxy..vw_xxx 
insert into proxy..vw_xxx 
from customer..vw_xxx 

편집 : 어떻게 DDL 문을 캡처하고 싶습니다. 예 : CREATE VIEW vw_yyy AS ... from proxy..vw_xxx a join customer..vw_xxx b from proxy..vw_xxx insert into proxy..vw_xxx from customer..vw_xxx GO CREATE VIEW vw_zzz AS SELECT * FROM customer.vw_xxx GO

첫 번째 CREATE VIEW를 캡처하고 싶습니다. 나는 정규식 사용 :.

보기를 만듭니다 * \ + (?!의 < 프록시) 승 ... *

및 /GMIS 옵션 를 GO하지만 그것도보기의 두 번째 창조와 일치하는 것 .

도움을 주시면 감사하겠습니다. 감사.

답변

3

부정 lookbehind 기반 정규 표현식을 사용하십시오.

자바 정규식

"\\w+(?<!proxy)\\.\\." 

C#을 정규식

@"\w+(?<!proxy)\.\." 

\w+ 일치 하나 이상의 단어 문자와 도트가 단어 proxy 앞에하지 않는 경우에만 두 점을 다음과 같습니다.

DEMO

String s = "from proxy..vw_xxx a join customer..vw_xxx b\n" + 
     "from proxy..vw_xxx\n" + 
     "insert into proxy..vw_xxx\n" + 
     "from customer..vw_xxx"; 
Matcher m = Pattern.compile("\\w+(?<!proxy)\\.\\.").matcher(s); 
while(m.find()) 
{ 
    System.out.println(m.group()); 
} 

출력 :

customer.. 
customer.. 
+0

추가 단어 경계 필요한 경우 '\ + (<\ bproxy?!) \ \' –

+0

안녕 승, 나는 위의 후속을했다... 정말 가능한지 확실하지 않습니다. 귀하의 의견을 고맙게 생각합니다. 다시 한번 감사드립니다. – user1580795

+0

추가 질문이있는 경우 새로운 질문으로 질문하십시오. '실제로 가능한지 확신 할 수 없다'는 설명과 함께. 어떻게? –

관련 문제