Редактировать: Я собираюсь выйти здесь на конечность и сказать, что вы, вероятно, должны использовать NSDataDetector
, как упоминает Дейв. Гораздо менее подвержен ошибкам, чем регулярные выражения.
Взгляните на регулярных выражений . Вы можете создать простой для извлечения URL-адреса, используя класс NSRegularExpression (доступен только на iPhone, но так как это то, на что вы ориентируетесь, у вас все в порядке), или найти один онлайн, который можно использовать. Об обучении по использованию класса см. здесь .
Код, который вы хотите, по сути выглядит следующим образом (используя регулярное выражение супер URL Джона Грубера ):
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))" options:NSRegularExpressionCaseInsensitive error:NULL];
NSString *someString = @"This is a sample of a http://abc.com/efg.php?EFAei687e3EsA sentence with a URL within it.";
NSString *match = [someString substringWithRange:[expression rangeOfFirstMatchInString:someString options:NSMatchingCompleted range:NSMakeRange(0, [someString length])]];
NSLog(@"%@", match); // Correctly prints 'http://abc.com/efg.php?EFAei687e3EsA'
Это извлечет первый URL в любой строке (конечно, это не проверяет ошибки, поэтому, если строка действительно не содержит никаких URL, она не будет работать, но взглянем на класс NSRegularExpression
, чтобы посмотрим, как обойти это.