NSDataDetector是继承于NSRegularExpression(Cocoa中的正则表达式)的一个子类,你可以把它看作一个正则表达式匹配器和令人难以置信的复杂的表达式,可以从自然语言(虽然可能更复杂)中提取你想要的信息。这里介绍一下用NSDataDetecto来检测文本中的网址的方法:
定义一个一个属性字符串属性:
@property (strong,nonatomic) NSMutableAttributedString *attributedString;
接下来就是检测了:
NSError *error;
NSDataDetector *dataDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];
if(error){
NSLog(@"NSDataDetector init failed : %@", error);
}
NSArray *linkMatches = [dataDetector matchesInString:text options:0 range:NSMakeRange(0, text.length)];
for (NSTextCheckingResult *match in linkMatches) {
if(match.resultType != NSTextCheckingTypeLink)
continue;
NSURL *url = match.URL;
[_attributedString addAttribute:@"tagSystemMsg" value:url range:NSMakeRange(0, _attributedString.length)];
[_attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:match.range];
}
其中match.URL即为文本中的网址,match.range即为网址在文本中的位置。