需求很简单,是从一段文本中匹配出其中的超链接。基本的做法就是用正则表达式去匹配。但是有这样一个问题。
网上大部分的识别URL的正则表达式url末尾有空格的情况下可以正确识别。比如这样的情况。
我是一段中文https://github.com/TinyQ 我还是一段中文
但是如果去掉TinyQ 后面的空格。匹配到的将是 “https://github.com/TinyQ我还是一段中文” 是连上的。
最后替换过好多正则才得以解决。这里贴上代码:
NSError *error;
NSString *regulaStr = @"\\bhttps?://[a-zA-Z0-9\\-.]+(?::(\\d+))?(?:(?:/[a-zA-Z0-9\\-._?,'+\\&%$=~*!():@\\\\]*)+)?";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regulaStr
options:NSRegularExpressionCaseInsensitive
error:&error];
NSArray *arrayOfAllMatches = [regex matchesInString:string options: range:NSMakeRange(, [string length])]; for (NSTextCheckingResult *match in arrayOfAllMatches)
{
NSString* substringForMatch = [string substringWithRange:match.range];
NSLog(@"substringForMatch");
}
这里做个更新。下面这个正则也是可以的。而且应该更好一些。
比如这种 Explorerwww.chiphell.com/ 。 也是可以识别出 www.chjiphell.com 的
((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)