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

来源:互联网 发布:淘宝增加流量 编辑:程序博客网 时间:2024/05/17 03:10

在项目中经常有识别文本中url并可以点击进行网页链接的需求。我们需要适当的处理带url的字符串

代码如下:

-(void)createUI

{

    textView=[[UITextViewalloc]initWithFrame:CGRectMake(18,100, self.view.bounds.size.width-36,100)];

    [textView setEditable:NO];

    [self.viewaddSubview: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 = [NSRegularExpressionregularExpressionWithPattern:regulaStr

                                                                          options:NSRegularExpressionCaseInsensitive

                                                                            error:&error];

    NSArray *arrayOfAllMatches = [regexmatchesInString:string options:0range:NSMakeRange(0, [stringlength])];

    //NSString *subStr;

    NSMutableArray *arr=[[NSMutableArrayalloc]init];

    NSArray *rangeArr=[[NSMutableArrayalloc]init];

    

    for (NSTextCheckingResult *matchin arrayOfAllMatches)

    {

        NSString* substringForMatch;

        substringForMatch = [string substringWithRange:match.range];

        [arr addObject:substringForMatch];

       

    }

    NSString *subStr=string;

    for (NSString *strin arr)

    {

       subStr=[subStr  stringByReplacingOccurrencesOfString:strwithString:@"网页链接"];

    }

   rangeArr=[self rangesOfString:@"网页链接"inString:subStr];

    

//    //计算大小

    UIFont *font = [UIFontsystemFontOfSize:15];

    NSMutableAttributedString *attributedText;

  

    attributedText=[[NSMutableAttributedStringalloc]initWithString:subStrattributes:@{NSFontAttributeName :font}];

    

    for(NSValue *valuein rangeArr)

    {

        NSInteger index=[rangeArrindexOfObject:value];

        NSRange range=[valuerangeValue];

         [attributedText addAttribute:NSLinkAttributeName value: [NSURLURLWithString:[NSStringstringWithFormat:@"%@",[arrobjectAtIndex:index]]] range:range];

    }

   return attributedText;



}

//获取查找字符串在母串中的NSRange

- (NSArray *)rangesOfString:(NSString *)searchString inString:(NSString *)str {

    

        NSMutableArray *results = [NSMutableArrayarray];

    

       NSRange searchRange =NSMakeRange(0, [strlength]);

    

       NSRange range;

    

    while ((range = [strrangeOfString:searchString options:0range:searchRange]).location !=NSNotFound) {

      

                [results addObject:[NSValuevalueWithRange:range]];

        

               searchRange = NSMakeRange(NSMaxRange(range), [strlength] - NSMaxRange(range));

        

            }

    

    return results;

}



0 2