Edytuj: Mam zamiar wyjść tutaj i powiedzieć, że powinieneś używać NSDataDetector
, jak wspomina Dave. Znacznie mniej podatny na błędy niż wyrażenia regularne.
Spójrz na regular expressions. Możesz skonstruować prosty, aby wyodrębnić adres URL za pomocą klasy NSRegularExpression (dostępny tylko na telefonie iPhone, ale ponieważ to właśnie celujesz, wszystko jest w porządku) lub znaleźć taką, z której możesz korzystać. Aby zapoznać się z samouczkiem dotyczącym używania klasy, zobacz here.
Kod chcesz zasadniczo wygląda następująco (przy użyciu John Gruber na super URL regex):
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'
To będzie wyodrębnić pierwszy URL w dowolny ciąg (oczywiście, to nie sprawdza błędów, więc jeśli ciąg naprawdę nie zawiera żadnych adresów URL nie będzie działać, ale spójrz na klasy NSRegularExpression
, aby zobaczyć, jak uzyskać wokół niego
Zobacz [moja odpowiedź] (http://stackoverflow.com/a/25574255/1966109) dla podobnego pytania, które wykorzystuje Swift 3 i daje 2 sposoby na rozwiązanie problemu. –