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

nab*_*nas 9 regex ios swift

我尝试在文本中获取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)

但什么都没发生.

Wik*_*żew 8

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

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

对于读者:

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

(?i)https?://(?:www\\.)?\\S+(?:/|\\b)
Run Code Online (Sandbox Code Playgroud)

会做的OP需要只匹配,与启动的URL httphttpsHTTPs


ale*_*los 6

斯威夫特 4

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. 用法

"www.google.com".isValidURL
Run Code Online (Sandbox Code Playgroud)