IOS 正則表達式匹配文本中URL位置並獲取URL所在位置(解決連接中文問題)


需求很簡單,是從一段文本中匹配出其中的超鏈接。基本的做法就是用正則表達式去匹配。但是有這樣一個問題。

網上大部分的識別URL的正則表達式url末尾有空格的情況下可以正確識別。比如這樣的情況。

 

我是一段中文https://github.com/TinyQ 我還是一段中文

但是如果去掉TinyQ 后面的空格。匹配到的將是 “https://github.com/TinyQ我還是一段中文” 是連上的。

最后替換過好多正則才得以解決。這里貼上代碼:

NSError *error;
    NSString *regulaStr = @"\\bhttps?://[a-zA-Z0-9\\-.]+(?::(\\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])];
    
    for (NSTextCheckingResult *match in arrayOfAllMatches)
    {
        NSString* substringForMatch = [string substringWithRange:match.range];
     NSLog(@"
substringForMatch");
}

這里做個更新。下面這個正則也是可以的。而且應該更好一些。

比如這種 Explorerwww.chiphell.com/ 。 也是可以識別出 www.chjiphell.com

((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\\.\\-~!@#$%^&*+?:_/=<>]*)?)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM