2010-03-14 10 views
3

Мое приложение получает множество текстовых строк, которые могут содержать или не содержать URL-адрес в любой точке строки. Каким будет лучший способ извлечения URL-адреса из строки? Спасибо.Извлечение URL из строки

ответ

3

The BSD-licensed AutoHyperlinks framework предоставляет классы для сканирования текста для URL-адресов и либо возвращает их вам, либо маркирует их как ссылки в атрибутной строке.

Я не думаю, что он построен из коробки для iPhone, но вы всегда можете добавить директивы препроцессора, чтобы вырезать любой зависимый от AppKit код. Интерфейс scan-and-return должен работать только после его создания. (Обязательно выполните тесты.)

Mike Abdullah wrote a patch for iPhone support. Вы можете попробовать это.

+0

Спасибо, я попытался это, но, судя по количеству ошибок и предупреждений, сгенерированного, это потребует значительного количества работы, чтобы получить эту работу на iPhone - – RunLoop

+0

JK: Это может ввести в заблуждение. Одна строка кода может вызвать множество ошибок, если она достаточно несовместима, но она все еще только одна строка кода. Я думаю, что зависимые от AppKit части AutoHyperlinks достаточно изолированы, что вы можете условно их упростить. –

+0

Спасибо, Питер. Завтра я дам патч. – RunLoop

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» для повышения эффективности. –

+0

Я также реализовал это в нашем коде KSFileUtilities с открытым кодом: https://github.com/karelia/KSFileUtilities/commit/4ef561512fab9a169fcf63129037bfddfda6257b –

Смежные вопросы