2010-04-20 5 views
6

모든 일치 항목이있는 경우 MatchingCollection을 가져올 수 있는지 궁금합니다.정규 표현식이 C에서 교차로와 일치합니다.

string input = "a a a"; 
Regex regex = new Regex("a a"); 
MatchCollection matches = regex.Matches(input); 
Console.WriteLine(matches.Count); 

이 코드는 1을 반환하지만 2를 반환합니다. 어떻게 처리합니까?
도움 주셔서 감사합니다.

답변

7
string input = "a a a"; 
Regex regexObj = new Regex("a a"); 
Match matchObj = regexObj.Match(input); 
while (matchObj.Success) { 
    matchObj = regexObj.Match(input, matchObj.Index + 1); 
} 

은 이전 일치 항목의 위치 다음 문자 다음 반복을 시작하는 문자열에 대해 반복하므로 모든 일치 항목을 찾습니다.

+0

내가 필요로하는 것처럼 보입니다. 감사. – StuffHappens

+0

+1 매우 좋았습니다. 검색 문자열이 바닐라 문자열이라고 가정하고 string.indexOf와 비슷한 것을 추천하려고했습니다. 이 메서드가 작동하지 않을 복잡한 정규식이 있는지 궁금 하네 ..... hmmm – juharr

0

"a"를 "a"로 바꾸어 while 루프에서 수행 할 수 있습니다. 일치하지 않을 때까지 정규 표현식과 다른 시간을 매치합니다.

+0

이 예제는 단순화되었습니다. 훨씬 복잡한 입력 문자열과 훨씬 복잡한 정규 표현식이 있습니다. 이 경우 솔루션이 작동하지 않습니다. 어쨌든 고마워. – StuffHappens

관련 문제