给定一个大字符串,创建字符串中包含的所有有效URL的数组的最佳方法是什么?
答案 0 :(得分:44)
不需要使用RegexKitLite
,因为iOS 4 Apple提供NSDataDetector
(NSRegularExpression
的子类)。
您可以像这样使用它(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
片段:片段