2011-05-14 24 views
13

Büyük bir dize verildiğinde, dizede yer alan tüm geçerli URL'lerin bir dizisini oluşturmanın en iyi yolu nedir?Objective-C - Bir dize içinde bir URL bulmak

#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); 

Baskı:

+0

fragmanı bir 'UITextView' ya da bir yaka UILabel' olarak ya da soemthing ekranda için var mı? – dredful

+0

Swift 3'ü kullanan benzer bir soru için [yanıtım] 'a (http://stackoverflow.com/a/25574255/1966109) bakın ve sorununuzu çözmek için 2 yol sunar. –

cevap

41

Bunun için, iOS 4 Apple NSDataDetector (NSRegularExpression'un bir alt sınıfı) olduğundan, bunun için RegexKitLite'u kullanmanız gerekmez.

NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 
NSArray* matches = [detector matchesInString:source options:0 range:NSMakeRange(0, [source length])]; 
+0

NSDataDetector yalnızca * iOS'ta kullanılabilir. Sorunun başlığı "* Objective-C * Bir Dize İçinde Bir URL Bulma" –

+0

Doğru, Mick'in hangi platformda çalıştığına bağlı ... Ama son sorularına bakarak iOS'u hedefliyor. – gcamp

+3

Arkadan bakışla, yukarıdaki yorumlara birkaç ay sonra 10.7'de Mac'e eklendi. – Tommy

6

Bunun için RegexKitLite kullanmayı tercih ediyorum

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

(Tabii ki, ben URL'ler için orada kullandım regex basitleştirilmiştir, ancak fikir.

-1

Bu url bağlantısını ayıklamak için en iyi yoldur:

Sadece bu gibi kullanabilirsiniz (source sizin dizedir).

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]); 

Çıkış:

şeması: DKC

konakçı: name.com

noktası: 8080

yolu:/12345

yol bileşenleri: ( "/", 123) parameterString: param

sorgusu: id = 1 & bağlantısı = 2

fragmanı:

İlgili konular