2010-03-14 76 views
3

我的應用程序接收到大量文本字符串,這些字符串可能包含或不包含字符串中任何地方的URL。從字符串中提取URL的最佳方法是什麼?謝謝。從字符串中提取URL

回答

3

The BSD-licensed AutoHyperlinks framework提供了一些類來掃描URL的文本,並將它們返回給您或將它們標記爲屬性字符串中的鏈接。

我不認爲它爲iPhone構建開箱即用,但是您總是可以添加預處理器指令來刪除任何AppKit相關的代碼。掃描和返回界面應該可以工作,一旦你得到它建立。 (確保運行測試。)

Mike Abdullah wrote a patch for iPhone support.你可以試試。

+0

謝謝,我試過,但所產生的錯誤和警告的數量來看,這將需要一個顯著大量的工作以獲得在iPhone上這個工作 - – RunLoop 2010-03-14 21:24:27

+0

JK:那可能會產生誤導。如果一行代碼足夠不可編譯,則會產生很多錯誤,但仍然只有一行代碼。我認爲AutoHyperlinks的AppKit依賴部分是非常隔離的,您可以很容易地將它們條件化。 – 2010-03-14 21:32:36

+0

謝謝彼得。明天我會試試這個補丁。 – RunLoop 2010-03-14 21:42:55

8

如果您正在使用Mac應用程序,則Mac OS X 10.6會提供一個新API,以便您使用拼寫檢查程序檢測URL。你可以這樣做。

NSString *s = @"http://example.com" 
NSInteger wordCount = 0; 
NSOrthography *orthography = nil; 
NSArray *checkResults = [[NSSpellChecker sharedSpellChecker] checkString:s range:NSMakeRange(0, [s length]) types:NSTextCheckingTypeLink options:nil inSpellDocumentWithTag:0 orthography:&orthography wordCount:&wordCount]; 
for (NSTextCheckingResult *result in checkResults) { 
    NSRange range = result.range; 
    NSURL *URL = result.URL; 
} 
+0

如果可以的話,這絕對比引入專用框架更可取。請注意,通常在搜索鏈接時通常不會關心正字法的字數,所以只需傳遞一個「NULL」指針以提高效率。 – 2012-02-07 11:49:15

+0

我也在開源的KSFileUtilities代碼中實現了這個功能:https://github.com/karelia/KSFileUtilities/commit/4ef561512fab9a169fcf63129037bfddfda6257b – 2012-02-07 12:01:54