我尝试在文本中获取网址。所以,在此之前,我使用了这样一个表达式:
let re = NSRegularExpression(pattern: "https?:\\/.*", options: nil, error: nil)!
但是当用户输入带有大写符号的网址(例如Http://Google.com
时,它与之匹配时)我遇到了问题。
我试过了:
let re = NSRegularExpression(pattern: "(h|H)(t|T)(t|T)(p|P)s?:\\/.*", options: nil, error: nil)!
但什么都没发生。
答案 0 :(得分:8)
使用正则表达式中的i
内联标记关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅Foundation Framework Reference。
(?ismwx-ismwx)
标志设置。更改标志设置。更改适用于设置后的模式部分。例如,(?i)更改为不区分大小写的匹配。标志在标记选项中定义。
对于读者:
在较大的文本中匹配网址已经是solved problem,但在这种情况下,simple regex喜欢
(?i)https?://(?:www\\.)?\\S+(?:/|\\b)
将按照OP要求仅匹配以http
或https
或HTTPs
等开头的网址。
答案 1 :(得分:2)
Swift 4
1-创建字符串扩展
2-使用它
import Foundation
extension String {
func 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))
}
}
像这样使用
"www.google.com".isValid()
答案 2 :(得分:1)
试试这个 - http?://([ - \ w \。] +)+(:\ d +)?(/([\ w / _ \。] *(\?\ S +)?)?) ?
let pattern = "http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?"
var matches = [String]()
do {
let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions(rawValue: 0))
let nsstr = text as NSString
let all = NSRange(location: 0, length: nsstr.length)
regex.enumerateMatchesInString(text, options: NSMatchingOptions.init(rawValue: 0), range: all, usingBlock: { (result, flags, _) in
matches.append(nsstr.substringWithRange(result!.range))
})
} catch {
return [String]()
}
return matches
答案 3 :(得分:1)
制作字符串
extension String {
var isAlphanumeric: Bool {
return rangeOfString( "^[wW]{3}+.[a-zA-Z]{3,}+.[a-z]{2,}", options: .RegularExpressionSearch) != nil
}
}
像这样打电话
"www.testsite.edu".isAlphanumeric // true
"flsd.testsite.com".isAlphanumeric //false