2010-06-28 3 views
3

다음 예에서는 pMAINp와 pMDSp 사이의 텍스트 을 검색하려고합니다..NET에서 Lazy Regex Match. 여기 뭐가 잘못 됐니?

string contents = "pMAINp MAP B FlightTest Load pMDSp ZutiCarrier pWingp some pMDSp more pWingp end"; 
string blockMainRegex = @"(?<=pMAINp)[\s\w+]+(?=(pMDS)?)"; 

내가 바라던 결과가 있었다 : "MAP B FlightTest로드"

하지만이 반환하는 것은 : "MAP B FlightTest 정규식은 뒤에 모양과 예견이있다 pMDSp로드 ZutiCarrier 일부 pMDSp 추가 pWingp 끝 "

여기에 게으른 일치를 시도하는 것을 알 수 있습니다 : (pMDS)? 분명히 작동하지 않습니다! 이 문제에 대한 도움을 많이 주시면 감사하겠습니다. 감사. :-)

EDIT : 찾고자하는 텍스트가 수정되었습니다.

이 작동 큰 :
문자열 blockMainRegex = @ "(? < = pMAINp)? [\ S \ w +] + (? = PMD를)";

+0

+1 - 그냥 질문에 대답해야했습니다. – Brett

답변

3

당신은 내가 여기에 게으른 일치를 시도하고있어 것을 알 수 있습니다 : (PMD를)을? 분명히 작동하지 않습니다!

어떻게 게으른 일치가 작동하는지 오해하는 것 같습니다.

한정 기호 - *, +,?에 게으른 연산자를 적용합니다. - 다른 곳에서는 "0 또는 1"로 해석됩니다. 당신이 정규식의 한 부분이 가능한 한 적은 수의 문자와 일치 에 정규식의 그 부분과 관련된 정량 게으른 연산자를 적용 할 경우

-이 경우에는, 그렇게처럼 사용하려면 :

[\s\w+]+? 
1
string blockMainRegex = @"pMAINp(.*?)pMDSp"; 

첫 번째 그룹에는 원하는 것이 있습니다. 예컨대 :

Regex re = new Regex(@"pMAINp(.*?)pMDSp"); 
string result = re.Match(contents).Groups[1].ToString(); 
+0

고마워, 실제로 나는 찾은 텍스트에 실수를했다. 수정되지 않았습니다. – MrGreggles

+0

Gregg, 알았어, 내 솔루션을 업데이트했습니다. –

+0

Matthew에게 감사드립니다. 당신 = 최고 남자. – MrGreggles