2010-08-02 2 views
0

나는 다음과 같은 코드가 있습니다NSRegularExpression의 numberOfMatchesInString은 항상 하나를 반환합니다!

NSString *text = @"http://bit.ly/111 http://bit.ly/222 http://www.www.www"; 
NSRegularExpression *aLinkRegex = [NSRegularExpression regularExpressionWithPattern:@".*http://.*" options:NSRegularExpressionCaseInsensitive error:nil]; 
NSUInteger numberOfMatches = [aLinkRegex numberOfMatchesInString:text options:0 range:NSMakeRange(0, [text length])]; 

내가 텍스트의 HTTP의 수를 (I이 좋은 정규식 아니라는 것을 알고) 찾으려하지만 3을 반환해야합니다 동안 numberOfMatchesInString 항상 1 반환을 위의 코드.

위의 코드가 잘못된 점을 알려주세요.

건배,

답변

1

정규 표현식이 처음 http://.* "먹는다"문자열의 나머지 부분을 일치하기 때문에 하나의 일치가있다.

왜 더 같은 검색하지 :

http:// 

또는 전체의 각 URL을 캡처하려는 경우, 뭔가 같은 :

http://[^ ]* 

후 아무것도에 대한 검색을 의미합니다 HTTP :// 그건 공간이 아닙니다.

일종의 정규 표현식 가이드를 통해 실제로 읽어야합니다.

+0

이렇게 많이 설명됩니다. 나는 정규 표현식에 대해 더 많이 읽을 필요가있다. 고마워 켄달, 너 최고야. – Motasim

+0

Mota : John Gruber의 URL 일치 정규식 (NSRegularExpression과 함께 작동한다고 가정)을 사용하는 것이 더 좋을 것입니다. http://daringfireball.net/2010/07/improved_regex_for_matching_urls 또는 Stephen Holt의 AutoHyperlinks 프레임 워크 : https://bitbucket.org/sholt/autohyperlinks2/wiki/Home –

+1

URL의 분리 된 일련의 공간이 있다면 단순한 접근 방식으로 구문 분석하는 것이 훨씬 저렴할 것입니다. 생각해 보니 그럴 경우 실제로 componentsSeperatedByString을 사용해야합니다. –

관련 문제