2010-08-02 90 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的的文本(我知道這是不是一個很好的正則表達式)的數目,但numberOfMatchesInString總是返回1,而它應該返回3上面的代碼。

有人能告訴我上面的代碼有什麼問題嗎?

乾杯,

回答

1

只有一個比賽,因爲你的正則表達式匹配的第一個http://.*「吃」的字符串的其餘部分。

爲什麼不尋找更多的東西一樣:

http:// 

,或者如果你想捕捉每一個URL完全,像:

http://[^ ]* 

此後意味着搜索任何內容HTTP:/ /那不是空間。

你應該真的看看通過某種正則表達式指導閱讀。

+0

這解釋了很多。我真的需要閱讀更多關於正則表達式的知識。謝謝肯德爾,你是最棒的。 – Motasim 2010-08-02 05:26:24

+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 /主頁 – 2010-08-02 06:08:09

+1

我想提到的是,儘管如果他只是有一系列空格分隔的URL,更簡單的方法將會便宜得多。 想想吧,如果是這樣的話,他真的應該只使用componentsSeperatedByString – 2010-08-02 16:19:40