Objective-C - поиск URL в строке - PullRequest
14 голосов
/ 14 мая 2011

Учитывая большую строку, каков наилучший способ создать массив всех допустимых URL-адресов, содержащихся в строке?

Ответы [ 3 ]

44 голосов
/ 14 мая 2011

Для этого не нужно использовать RegexKitLite, поскольку iOS 4 Apple предоставляет NSDataDetector (подкласс NSRegularExpression).

Вы можете использовать его просто так (source ваша строка):

NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
NSArray* matches = [detector matchesInString:source options:0 range:NSMakeRange(0, [source length])];
6 голосов
/ 14 мая 2011

Я бы использовал RegexKitLite для этого:

#import "RegExKitLite.h"

...

NSString * urlString = @"blah blah blah http://www.google.com blah blah blah http://www.stackoverflow.com blah blah balh http://www.apple.com";
NSArray *urls = [urlString componentsMatchedByRegex:@"http://[^\\s]*"];
NSLog(@"urls: %@", urls);

Печать:

urls: (
    "http://www.google.com",
    "http://www.stackoverflow.com",
    "http://www.apple.com"
)

(Конечно, регулярное выражение, которое я использовал там для URL-адресов, упрощено, но вы понимаете.)

0 голосов
/ 05 октября 2016

Это лучший способ извлечь URL-ссылку.

NSString *url_ = @"dkc://name.com:8080/123;param?id=123&pass=2#fragment";

NSURL *url = [NSURL URLWithString:url_];

NSLog(@"scheme: %@", [url scheme]);

NSLog(@"host: %@", [url host]);

NSLog(@"port: %@", [url port]);

NSLog(@"path: %@", [url path]);

NSLog(@"path components: %@", [url pathComponents]);

NSLog(@"parameterString: %@", [url parameterString]);

NSLog(@"query: %@", [url query]);

NSLog(@"fragment: %@", [url fragment]);

Выход:

схема: DKC

хост: name.com

порт: 8080

путь: / 12345

компоненты пути: ( "/", 123) параметр String: параметр

запрос: id = 1 & pass = 2

фрагмент: фрагмент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...