Ios 用于获取带大写符号的字符串形式URL的正则表达式
我尝试在文本中获取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
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