Objective-C - 在字符串中查找URL

时间:2011-05-14 00:09:47

标签: iphone objective-c nsstring

给定一个大字符串,创建字符串中包含的所有有效URL的数组的最佳方法是什么?

3 个答案:

答案 0 :(得分:44)

不需要使用RegexKitLite,因为iOS 4 Apple提供NSDataDetectorNSRegularExpression的子类)。

您可以像这样使用它(source是您的字符串):

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

答案 1 :(得分:6)

我会使用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"
)

(当然,我在那里用于网址的正则表达式已经过简化,但你明白了。)

答案 2 :(得分:-1)

这是提取网址链接的最佳方式。

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

     

路径组件:(       " /&#34 ;,       123)parameterString:param

     

查询:id = 1& pass = 2

     

片段:片段