美文网首页日常小知识点
iOS 字符串中判断超链接

iOS 字符串中判断超链接

作者: _Waiting_ | 来源:发表于2018-06-08 09:16 被阅读3次
    -(NSMutableAttributedString*)subStr:(NSString *)string
    {
        NSError *error;
        //可以识别url的正则表达式
        NSString *regulaStr = @"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z0-9]{1,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)";
    //    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];
        NSMutableArray *rangeArr=[[NSMutableArray alloc]init];
        
        for (NSTextCheckingResult *match in arrayOfAllMatches)
        {
            NSString* substringForMatch;
            substringForMatch = [string substringWithRange:match.range];
            [arr addObject:substringForMatch];
            
        }
        NSSet *set = [NSSet setWithArray:arr];
        arr = [NSMutableArray arrayWithArray:[set allObjects]];
        NSString *subStr=string;
        for (NSString *str in arr)
        {
            [self rangesOfString:str inString:subStr];
            [rangeArr addObject:[self rangesOfString:str inString:subStr]];
            
        }
        
        //计算大小
        UIFont *font = [UIFont systemFontOfSize:15];
        NSMutableAttributedString *attributedText;
        
        attributedText=[[NSMutableAttributedString alloc]initWithString:subStr attributes:@{NSFontAttributeName :font}];
        
        for (NSDictionary *dic in rangeArr)
        {
            NSString *url =  dic[@"url"];
            NSArray *da = dic[@"array"];
            for(NSValue *value in da)
            {
                NSRange range=[value rangeValue];
                [attributedText addAttribute: NSLinkAttributeName value: [NSURL URLWithString:url] range:range];
            }
        }
        
        
        return attributedText;
        
        
    }
    //获取查找字符串在母串中的NSRange
    - (NSDictionary *)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));
            
        }
        
        
        NSDictionary *dic = @{@"array":results,@"url":searchString};
        
        return dic;
    }
    

    相关文章

      网友评论

        本文标题:iOS 字符串中判断超链接

        本文链接:https://www.haomeiwen.com/subject/absosftx.html