ios开发中使用正则表达式识别处理字符串中的URL

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

}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值