एक बड़ी स्ट्रिंग को देखते हुए, स्ट्रिंग के भीतर मौजूद सभी मान्य यूआरएल की सरणी बनाने का सबसे अच्छा तरीका क्या है?उद्देश्य-सी - एक स्ट्रिंग के भीतर एक यूआरएल ढूँढना
उत्तर
इस के लिए RegexKitLite
उपयोग करने के लिए कोई ज़रूरत नहीं, आईओएस 4 के बाद से एप्पल NSDataDetector
(NSRegularExpression
का एक उपवर्ग प्रदान)।
NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
NSArray* matches = [detector matchesInString:source options:0 range:NSMakeRange(0, [source length])];
NSDataDetector * केवल * आईओएस पर उपलब्ध है। प्रश्न का शीर्षक "* उद्देश्य-सी * एक स्ट्रिंग के भीतर एक यूआरएल ढूँढना" –
सच है, यह इस बात पर निर्भर करता है कि मिक किस मंच पर काम कर रहा है ... लेकिन अपने अंतिम प्रश्नों को देखते हुए, वह आईओएस को लक्षित कर रहा है। – gcamp
हिंडसाइट के साथ, इसे मैक में 10.7 में जोड़ा गया था, ऊपर दी गई टिप्पणियों के कुछ महीने बाद। – Tommy
मैं इसके लिए 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"
)
(बेशक, regex मैं यूआरएल के लिए वहाँ का उपयोग किया है सरल है, लेकिन आप विचार मिलता है।)
यह सबसे अच्छा तरीका है URL लिंक को निकालने के लिए है:
आप यह बस इस तरह उपयोग कर सकते हैं (source
अपने स्ट्रिंग है)।
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) parameterString: param
क्वेरी: आईडी = 1 & पास = 2
टुकड़ा: टुकड़ा
एक 'UITextView' या एक' UILabel' में वरना soemthing के लिए प्रदर्शन के लिए इस है? – dredful
[मेरा जवाब] देखें (http://stackoverflow.com/a/25574255/1966109) एक समान प्रश्न के लिए जो स्विफ्ट 3 का उपयोग करता है और आपकी समस्या को हल करने के 2 तरीके देता है। –