我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:
let re = NSRegularExpression(pattern: "https?:\\/.*", options: nil, error: nil)!
Run Code Online (Sandbox Code Playgroud)
但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配),我遇到了问题.
我试过了:
let re = NSRegularExpression(pattern: "(h|H)(t|T)(t|T)(p|P)s?:\\/.*", options: nil, error: nil)!
Run Code Online (Sandbox Code Playgroud)
但什么都没发生.
您可以使用iregex中的内联标志关闭区分大小写,有关可用的正则表达式功能的详细信息,请参阅Foundation Framework Reference.
(?ismwx-ismwx)
标志设置.更改标志设置.更改适用于设置后的模式部分.例如,(?i)更改为不区分大小写的匹配.标志在Flag选项中定义.
对于读者:
匹配的URL 内较大的文本已经是一个解决 问题,但这种情况下,一个简单的正则表达式像
(?i)https?://(?:www\\.)?\\S+(?:/|\\b)
Run Code Online (Sandbox Code Playgroud)
会做的OP需要只匹配,与启动的URL http或https或HTTPs等
1.创建字符串扩展
import Foundation
extension String {
var isValidURL: Bool {
guard !contains("..") else { return false }
let head = "((http|https)://)?([(w|W)]{3}+\\.)?"
let tail = "\\.+[A-Za-z]{2,3}+(\\.)?+(/(.)*)?"
let urlRegEx = head+"+(.)+"+tail
let urlTest = NSPredicate(format:"SELF MATCHES %@", urlRegEx)
return urlTest.evaluate(with: trimmingCharacters(in: .whitespaces))
}
}
Run Code Online (Sandbox Code Playgroud)
2. 用法
Run Code Online (Sandbox Code Playgroud)"www.google.com".isValidURL