正则expression式使用大写符号快速获取string中的URL

我尝试在文本中获取url。 所以,之前我用这样一个expression:

let re = NSRegularExpression(pattern: "https?:\\/.*", options: nil, error: nil)! 

但是当用户使用大写的符号inputURL(比如Http://Google.com ,它不符合它)时,我遇到了问题。

我试过了:

 let re = NSRegularExpression(pattern: "(h|H)(t|T)(t|T)(p|P)s?:\\/.*", options: nil, error: nil)! 

但没有发生。

您可以使用regex中的内联标志closures区分大小写,有关可用的正则expression式function的更多信息,请参阅Foundation Framework参考 。

(?ismwx-ismwx)
标志设置。 更改标志设置。 设置后,更改将应用​​于模式的部分。 例如,(?i)更改为不区分大小写的匹配。标志在标志选项中定义。

对于读者:

较大的文本匹配一个URL已经是一个解决的 问题 ,但是对于这种情况,像一个简单的正则expression式

 (?i)https?://(?:www\\.)?\\S+(?:/|\\b) 

将按照OP要求仅匹配以httphttpsHTTPs开头的URL。

尝试这个 – 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 

让string变得更加紧张

 extension String { var isAlphanumeric: Bool { return rangeOfString( "^[wW]{3}+.[a-zA-Z]{3,}+.[az]{2,}", options: .RegularExpressionSearch) != nil } } 

像这样打电话

 "www.testsite.edu".isAlphanumeric // true "flsd.testsite.com".isAlphanumeric //false 

只要创build我的工作很不错,它很容易修改。

func isValidURL() – > Bool {var isValid = false

  if !self.containsString("..") { 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) isValid = urlTest.evaluateWithObject(self.trim()) } return isValid } 

直接调用它或像这样在一个string扩展中

 import Foundation extension String { func isValidURL() -> Bool { var isValid = false if !self.containsString("..") { 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) isValid = urlTest.evaluateWithObject(self.trim()) } return isValid } } 

并且像这样称呼它

 let newUrl = "www.google.com" let isValid = newUrl.isValid()