正则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要求仅匹配以http
或https
或HTTPs
开头的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()