2012-06-13 2 views
1

정규식 문제로 난처한 상황에 처해 있습니다. 나는 그들을 프로젝트에 사용 해왔고 완벽하게 작동했지만, 긍정적 인 시각으로 해결 될 수 있다고 생각되는 상황에 이르렀지만 예상대로 시도하지 못했습니다.정규 표현식에 희미합니다 (긍정적 인 미리보기 문제?)

나는 아래에 한 줄을 만들었습니다. 그 중 두 개의 일치 항목이 반환되기를 원합니다. 첫 번째 항목에는 "This"와 "thisThing"이 포함되고 다른 하나에는 "That"와 "thatThing"이 포함됩니다. 첫 번째 값은 "This"또는 "That 두 번째 값은 임의의 (\ w *) 패턴이 될 수 있습니다. ,

K\.(This|That) (????????????????) (\w*)(?=\)) 

의미 "이것은"또는 "그"즉 "K."이후에 발생 찾기 :

adsf(49) asd k:38* K.This(jfkael dk&$% thisThing) and K.That($$$$ djaf aj_dfj^^^thatThing); 

나는이 같은 될 것이라고 생각 그런 다음 ")"앞에 첫 번째 단어를 가져옵니다. 그러나, 나는 당신이 그것을 찾을 때까지 ("찾을"때까지 앞을 내다 본다), 그리고 그 단어를 배울 때까지 되돌릴 수있는 방법을 정말로 이해하지 못한다. 그런 일이 가능한가?

+1

당신이하려는 일을 완전히 이해하지 못했지만 두 개의 이산 토큰 (서로의 내부에 중첩되지 않음) 사이에서 내용을 찾으려고한다면 그렇습니다. 정규식으로. –

+0

질문이 혼란 스럽습니다. 제발 좀 더 주 시겠어요? – buckley

+0

이 짧은 조언을 읽어 보시고 질문을 보내주십시오. http://worksol.be/regex.html – buckley

답변

3

당신이 사용할 수있는 non-greedy quantifier :

K\.(This|That).*?(\w*)\) 

또는 (당신은 닫는 괄호 경기의 일부가 될하지 않으려는 경우)

K\.(This|That).*?(\w*)(?=\)) 

이 사이에 아무것도 일치합니다이 방법 이것과 그 말은 너무 느려지므로 (\w*과 잘 어울리면 다음에 )이없는 경우 역 추적하십시오)

+0

훌륭한 답변, 완벽하지는 않은 질문에 감사드립니다. 비 욕심 많은 양의 정보. 정확히 내가 알아야 할 것이 었습니다. 정규 표현식에 대한 지식이 증가하고 있습니다! – user1028435

2

어웨이 정보 : K\.(This|That)\(.*?(\w+)\)

이것은 괄호 사이의 부분과 일치하지만 닫는 괄호 앞에 단어 문자가있는 즉시 중지됩니다.

관련 문제