2011-11-14 3 views
0

discussion2. 정규 표현식이 첫 번째 패턴 발생 만 성공적으로 찾습니다. 이 첫 번째 패턴 다음에 오는 모든 패턴에는 이전 패턴이 포함됩니다.자바 정규 표현식 정규 표현식이 패턴을 갖는

예. 내가 구문 분석 처음 나는이 후

executeRule(document, 'PublishDocumentsToEmail', [ 
     'xmlMapping':'xmlmapping.TagRegLike', 
     'emailAddress':'EMAIL([email protected])', 
     'emailSubject':'Test', 
     'emailText':'test', 
     'filenameSuffix':'test'] 
     ,crs 
    ); 

내가 재귀

setSomething(false); 
executeRule(document, 'PublishDocumentsToEmail', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
    ,crs 
); 

System.out.println("bla"); 

executeRule(document, 'PublishDocumentsToJMS', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
); 
인 새 텍스트와 같은 구문 분석 메소드를 호출된다 그래서 패턴에 일부 교체 할
executeRule(document, 'PublishDocumentsToEmail', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
); 

을 찾을 수

내 정규 표현식은 전체 섹션과 일치합니다.

executeRule(document, 'PublishDocumentsToEmail', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
    ,crs 
); 

System.out.println("bla"); 

executeRule(document, 'PublishDocumentsToJMS', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
); 

두 번째 패턴에만 어떻게 일치시킬 수 있습니까? index 첫/이미 수정 된 후에 발생이다

들으

답변

1

나는 철저하게 사례를 읽어 보지 않았하지만 당신은 하나 Matcher#find()를 사용할 때 경기를 통해 마지막으로 일치하거나 루프 후에 시작합니다 패턴으로 \G를 사용할 수 있습니다.

희망이 있습니다.

업데이트 : 나는 반복적 인 새 텍스트와 같은 구문 분석 메소드를 호출이 후

...

왜 재귀 적으로 그 부를 것이다? 재귀가 표시되지 않으므로 첫 번째 호출에서 찾은 일치 항목을 반복 할 수 있습니다.

0

당신이하려는 일은 executeRule 같은 구조의 문자열의 마지막 줄에 ,crs을 추가 하시겠습니까? 그 정도로 간단합니다 닫는 ] (길을 따라 몇 가지 주요한 공백의 샘플을 캡처)에 후 다시 연결하고 ,crs 라인을 추가까지

s = s.replaceAll("(?m)^executeRule\\([^\\[]*\\[(\\s*)[^\\]]*\\]", "$0$1,crs"); 

난 그냥 모든 것을 일치. 니즈가 그것보다 복잡하다면, 우리가 정확히 무엇인지 말해 줄 필요가있을 것이다. 그러나 당신이 지금하고있는 것처럼 입력을 여러 번 통과시키는 것보다 더 나은 해결책이있을 것이라고 확신합니다.