使用大写符号在字符串swift中获取URL的正则表达式

时间:2015-06-23 08:05:24

标签: ios regex swift

我尝试在文本中获取网址。所以,在此之前,我使用了这样一个表达式:

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)!

但什么都没发生。

4 个答案:

答案 0 :(得分:8)

使用正则表达式中的i内联标记关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅Foundation Framework Reference

  

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

对于读者:

在较大的文本中匹配网址已经是solved problem,但在这种情况下,simple regex喜欢

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

将按照OP要求仅匹配以httphttpsHTTPs等开头的网址。

答案 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