Objective-C - Поиск URL-адреса внутри строки
Учитывая большую строку, какой лучший способ создать массив всех допустимых URL-адресов, которые содержатся в строке?
Ответы
Ответ 1
Не нужно использовать 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])];
Ответ 2
Я бы использовал 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-адресов, упрощено, но вы получаете идею.)
Ответ 3
Это лучший способ извлечь 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
host: name.com
порт: 8080
путь:/12345
компоненты пути: ( "/", 123) параметрString: param
query: id = 1 & pass = 2
фрагмент: фрагмент