需求很簡單,是從一段文本中匹配出其中的超連接。基本的作法就是用正則表達式去匹配。可是有這樣一個問題。git
網上大部分的識別URL的正則表達式url末尾有空格的狀況下能夠正確識別。好比這樣的狀況。github
我是一段中文https://github.com/TinyQ 我仍是一段中文正則表達式
可是若是去掉TinyQ 後面的空格。匹配到的將是 「https://github.com/TinyQ我仍是一段中文」 是連上的。url
最後替換過好多正則才得以解決。這裏貼上代碼:spa
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");
}
這裏作個更新。下面這個正則也是能夠的。並且應該更好一些。code
好比這種 Explorerwww.chiphell.com/ 。 也是能夠識別出 www.chjiphell.com 的blog
((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\\.\\-~!@#$%^&*+?:_/=<>]*)?)ip