ios开发中使用正则表达式识别处理字符串中的URL
2016-07-25 18:50
483 查看
在项目中经常有识别文本中url并可以点击进行网页链接的需求。我们需要适当的处理带url的字符串
代码如下:
-(void)createUI
{
textView=[[UITextView
alloc]initWithFrame:CGRectMake(18,
100, self.view.bounds.size.width-36,
100)];
[textView setEditable:NO];
[self.view
addSubview:textView];
[self subStr:@"我是一段中文https://github.com/TinyQ我还是一段中文阿里科技屌丝拉法基是拉萨江东父老阿斯蒂芬阿斯蒂芬四缸发动机https://www.baidu.com发送"];
}
-(NSMutableAttributedString*)subStr:(NSString *)string
{
NSError *error;
//可以识别url的正则表达式
NSString *regulaStr =
@"((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\\.\\-~!@#$%^&*+?:_/=<>]*)?)";
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:regulaStr
options:NSRegularExpressionCaseInsensitive
error:&error];
NSArray *arrayOfAllMatches = [regex
matchesInString:string options:0
range:NSMakeRange(0, [string
length])];
//NSString *subStr;
NSMutableArray *arr=[[NSMutableArray
alloc]init];
NSArray *rangeArr=[[NSMutableArray
alloc]init];
for (NSTextCheckingResult *match
in arrayOfAllMatches)
{
NSString* substringForMatch;
substringForMatch = [string substringWithRange:match.range];
[arr addObject:substringForMatch];
}
NSString *subStr=string;
for (NSString *str
in arr)
{
subStr=[subStr stringByReplacingOccurrencesOfString:str
withString:@"网页链接"];
}
rangeArr=[self
rangesOfString:@"网页链接"
inString:subStr];
// //计算大小
UIFont *font = [UIFont
systemFontOfSize:15];
NSMutableAttributedString *attributedText;
attributedText=[[NSMutableAttributedString
alloc]initWithString:subStr
attributes:@{NSFontAttributeName :font}];
for(NSValue *value
in rangeArr)
{
NSInteger index=[rangeArr
indexOfObject:value];
NSRange range=[value
rangeValue];
[attributedText addAttribute:
NSLinkAttributeName value: [NSURL
URLWithString:[NSString
stringWithFormat:@"%@",[arr
objectAtIndex:index]]] range:range];
}
return attributedText;
}
//获取查找字符串在母串中的NSRange
- (NSArray *)rangesOfString:(NSString *)searchString inString:(NSString *)str {
NSMutableArray *results = [NSMutableArray
array];
NSRange searchRange =
NSMakeRange(0, [str
length]);
NSRange range;
while ((range = [str
rangeOfString:searchString options:0
range:searchRange]).location !=
NSNotFound) {
[results addObject:[NSValue
valueWithRange:range]];
searchRange = NSMakeRange(NSMaxRange(range), [str
length] - NSMaxRange(range));
}
return results;
}
代码如下:
-(void)createUI
{
textView=[[UITextView
alloc]initWithFrame:CGRectMake(18,
100, self.view.bounds.size.width-36,
100)];
[textView setEditable:NO];
[self.view
addSubview:textView];
[self subStr:@"我是一段中文https://github.com/TinyQ我还是一段中文阿里科技屌丝拉法基是拉萨江东父老阿斯蒂芬阿斯蒂芬四缸发动机https://www.baidu.com发送"];
}
-(NSMutableAttributedString*)subStr:(NSString *)string
{
NSError *error;
//可以识别url的正则表达式
NSString *regulaStr =
@"((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\\.\\-~!@#$%^&*+?:_/=<>]*)?)";
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:regulaStr
options:NSRegularExpressionCaseInsensitive
error:&error];
NSArray *arrayOfAllMatches = [regex
matchesInString:string options:0
range:NSMakeRange(0, [string
length])];
//NSString *subStr;
NSMutableArray *arr=[[NSMutableArray
alloc]init];
NSArray *rangeArr=[[NSMutableArray
alloc]init];
for (NSTextCheckingResult *match
in arrayOfAllMatches)
{
NSString* substringForMatch;
substringForMatch = [string substringWithRange:match.range];
[arr addObject:substringForMatch];
}
NSString *subStr=string;
for (NSString *str
in arr)
{
subStr=[subStr stringByReplacingOccurrencesOfString:str
withString:@"网页链接"];
}
rangeArr=[self
rangesOfString:@"网页链接"
inString:subStr];
// //计算大小
UIFont *font = [UIFont
systemFontOfSize:15];
NSMutableAttributedString *attributedText;
attributedText=[[NSMutableAttributedString
alloc]initWithString:subStr
attributes:@{NSFontAttributeName :font}];
for(NSValue *value
in rangeArr)
{
NSInteger index=[rangeArr
indexOfObject:value];
NSRange range=[value
rangeValue];
[attributedText addAttribute:
NSLinkAttributeName value: [NSURL
URLWithString:[NSString
stringWithFormat:@"%@",[arr
objectAtIndex:index]]] range:range];
}
return attributedText;
}
//获取查找字符串在母串中的NSRange
- (NSArray *)rangesOfString:(NSString *)searchString inString:(NSString *)str {
NSMutableArray *results = [NSMutableArray
array];
NSRange searchRange =
NSMakeRange(0, [str
length]);
NSRange range;
while ((range = [str
rangeOfString:searchString options:0
range:searchRange]).location !=
NSNotFound) {
[results addObject:[NSValue
valueWithRange:range]];
searchRange = NSMakeRange(NSMaxRange(range), [str
length] - NSMaxRange(range));
}
return results;
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- APP添加CNZZ统计插件教程 Android版添加phonegap
- Android APP与媒体存储服务的交互
- java实现收藏名言语句台词的app
- 修改Android App样式风格的方法
- Android App数据格式Json解析方法和常见问题
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法