2015-01-14 3 views
0

나는 명령으로 줄을 읽어야하는 작은 프로젝트를하고있다. 명령은 "\\&[abcd]" 패턴과 일치하는 문자열입니다.
이전 일치 항목과 다음 일치 항목 사이에 문자열이 있으면 이전 명령을 기반으로 작업을 수행해야합니다. while (m.find())으로 반복 중이고 패턴 (즉 명령)과 일치하는 문자열을 얻을 수는 있지만 패턴과 일치하지 않는 문자열을 얻는 방법을 모르겠습니다. 명령을 ""으로 바꾸고 전체 문자열을 가져 오는 것은 한 가지 방법 일 수 있지만 특정 하위 문자열에 대한 작업을 수행 할 수는 없습니다.
그래서 이전 명령을 기반으로하는 명령 사이에서 문자열에 대한 작업을 수행 할 수 있습니까?정규식을 제외한 모든 것

코드 나는 데 문제가 쓰기 : LolaLolaLolagggg

편집 : 명령의

번호 또는 $a$bLola$cg

는 다음과 같은 출력을 생성합니다 : 입력에 따라

int i=0; 
while (m.find()) { 
     switch (m.group()) { 
     case "&a": 
      i+=1; 
      break; 
     case "&b": 
      i+=2; 
      break; 
     case "&c": 
      i=4; 
      break; 
     ... 
     } 
    //get non-pattern matching strings and modify it based on previous commands. 
} 

문자열은 설정되지 않으며 어떤 순서로도 될 수 있습니다. 문자열이 없으면 아무 것도 인쇄되지 않습니다. 명령이 없으면 문자열을 수정하지 않고 인쇄합니다.
중복 답변이 여기에 적용되지 않는 것 같습니다. 첫 번째 while(m.find()) 루프 이후에 i이 완전히 변경되었으므로 정규식 (문자열이 아닌 명령)을 캡처하는 정규식이 작동하지 않습니다.

다음 입력 : $a$bLola$cgLolagLolagLolagLolag을 출력합니다.

+2

일부 문자열 및 해당 대체 문자의 예를 추가 할 수 있습니까? – anubhava

답변

-1

이 작동 방식은 문자열을 단일 일치로 캡처하는 것입니다.
단일 명령이있는 한 전체 입력이 구문 분석됩니다.
다음 각 일치는 당신에게 명령과 문자열 (각각 그룹의 1과 2)을 줄 것입니다.

문자열을 캡처 할 때마다 명령에 따라 작업을 수행하고
새 문자열에 추가하십시오.

문자열 전에 명령입니다 :
이 골라 봐 :

# "(?s)(&[abcd])((?:(?!&[abcd]).)+)?" 

(?s)       # Dot-all modifier, dot matches any character 
(& [abcd])     # (1), Command, required 

(       # (2 start), String 
     (?:       # Cluster start 
      (?! & [abcd])    # Lookahead assertion, not a command ahead 
      .        # Assertion passed, grab this character 
    )+       # Cluster end, do 1 to many times 
)?        # (2 end), optional 

이 문자열 후 명령입니다.

# "(?s)((?:(?!&[abcd]).)+)?(&[abcd])" 

(?s)       # Dot-all modifier, dot matches any character 
(       # (1 start), String 
     (?:       # Cluster start 
      (?! & [abcd])    # Lookahead assertion, not a command ahead 
      .        # Assertion passed, grab this character 
    )+       # Cluster end, do 1 to many times 
)?       # (1 end), Optional 
(& [abcd])     # (2), Command, Required 
관련 문제