Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用于获取带大写符号的字符串形式URL的正则表达式_Ios_Regex_Swift - Fatal编程技术网

Ios 用于获取带大写符号的字符串形式URL的正则表达式

Ios 用于获取带大写符号的字符串形式URL的正则表达式,ios,regex,swift,Ios,Regex,Swift,我尝试在文本中获取URL。所以之前我用过这样一个表达: let re = NSRegularExpression(pattern: "https?:\\/.*", options: nil, error: nil)! 但是当用户输入带有大写符号的URL时(比如H),我遇到了一个问题ttp://Google.com,不匹配) 我试过: let re = NSRegularExpression(pattern: "(h|H)(t|T)(t|T)(p|P)s?:\\/.*", options: ni

我尝试在文本中获取URL。所以之前我用过这样一个表达:

let re = NSRegularExpression(pattern: "https?:\\/.*", options: nil, error: nil)!
但是当用户输入带有大写符号的URL时(比如
H),我遇到了一个问题ttp://Google.com
,不匹配)

我试过:

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

但是什么也没发生。

如果在正则表达式中使用
i
inline标志关闭区分大小写,请参阅以获取有关可用正则表达式功能的更多信息

(?ismwx ismwx)

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

读者:

在更大的文本中匹配URL已经是一个难题,但在这种情况下,类似于

将按照OP的要求只匹配以
http
https
https
等开头的URL。

试试这个-http?:/([-\w\.]+)+(:\d+)(/([\w/\u\.]*(\?\ S+)


对字符串进行扩展

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
Swift 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))
    }

}
2。用法


可能是因为您仍然没有大写字母“s”?请改用不区分大小写的匹配?有一个问题是,部分这样做是为了保持性能。我可以理解为什么堆栈不显示URL。Sow文本是您需要使用ignorecase标志,例如
(?i)https?:\\/.*
。是的,这很有帮助,谢谢不起作用-输入-测试web新测试通过输出-新测试通过输出-新测试通过什么意思?你能贴出它不起作用的明显证据吗?这里的要点是
Http://Google.com
http://google.com
应与http://匹配
(?i)
会从模式中关闭大小写敏感度。正确,OP只需匹配包含
http
https
的URL。这是唯一的要求。我的解决方案在当前需求下适用于OP。请不要把他们想得太好。对不起,我的朋友投了反对票。我可以删除否决票,但除非你再次编辑答案,否则我不会这么做。这个问题的标题有点误导。您是否可以编辑您的答案来指定?顺便说一句,我不想提出更多的观点。别紧张,伙计:-)Thanks@Deb:我添加了一个正则表达式来匹配以
http
https
开头的URL。OP不需要匹配其他字符。绝对不需要在字符类中转义一个点。为什么要使用这么多的捕获组?您没有使用任何。谢谢您的评论,但是您是否检查了我针对您的评论发布的测试用例?感谢它,并发现黛布的答案可以完全匹配的网址。斯特里比雪夫的答案将从http一直匹配到行尾,这不是一个合法的url。
"www.testsite.edu".isAlphanumeric  // true
"flsd.testsite.com".isAlphanumeric //false
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))
    }

}
"www.google.com".isValidURL