博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios开发中使用正则表达式识别处理字符串中的URL
阅读量:6472 次
发布时间:2019-06-23

本文共 2429 字,大约阅读时间需要 8 分钟。

hot3.png

在项目中经常有识别文本中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 result

转载于:https://my.oschina.net/5951008876/blog/749093

你可能感兴趣的文章
java单例模式深度解析
查看>>
【学习笔记】阿里云Centos7.4下配置Nginx
查看>>
VuePress手把手一小時快速踩坑
查看>>
dnsmasq安装使用和体验
查看>>
学习constructor和instanceof的区别
查看>>
Vijos P1881 闪烁的星星
查看>>
ABP理论学习之领域服务
查看>>
Qt 控制watchdog app hacking
查看>>
让所有IE支持HTML5的解决方案
查看>>
RDD之五:Key-Value型Transformation算子
查看>>
Windows 搭建Hadoop 2.7.3开发环境
查看>>
percona 5.7.11root初始密码设置
查看>>
Cognitive Security的异常检测技术
查看>>
Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
查看>>
生活杂事--度过十一中秋
查看>>
Pyrex也许是一个好东西
查看>>
Java内部类总结
查看>>
WINFORM WPF字体颜色相互转换
查看>>
能力不是仅靠原始积累(三)
查看>>
实战:使用终端服务网关访问终端服务
查看>>