NSRegularExpression Returns 无效范围
NSRegularExpression Returns Invalid Range
当我在 Playground 中 运行 以下代码时,我得到了一个无效的范围:
import Cocoa
var error: NSError?
var captureGroups: [String] = []
var input = "http://www.google.com"
var pattern = "(https?|ftp|file|gopher|mailto|news|nntp|telnet|wais)://[a-zA-Z0-9_@]+([.:][a-zA-Z0-9_@]+)*/?[a-zA-Z0-9_?,%#~&/\-]+([:.][a-zA-Z0-9_?,%#~&/\-]+)*"
var internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error)!
if let match = internalExpression.firstMatchInString(input, options: nil, range: NSMakeRange(0, count(input))) {
match.numberOfRanges // 4
match.rangeAtIndex(0) // (0, 21)
match.rangeAtIndex(1) // (0, 4)
match.rangeAtIndex(2) // (17, 3)
match.rangeAtIndex(3) // (9223372036854775807,0)
}
此代码对其他正则表达式有效,似乎只有这个给它带来麻烦。我不是 RegEx 专家,所以我不确定应该如何进行。
你像这样做一个 if 测试:
if match.rangeAtIndex(3).location != NSNotFound {
// Do if found result.
} else {
// Handle error.
}
如果你想解析一个URL,使用NSURL
可能是最简单的:
if let url = NSURL(string: input) {
println(url.scheme)
println(url.host)
println(url.path)
println(url.pathComponents)
println(url.query)
}
如果您需要帮助修复正则表达式并理解您收到 NSNotFound
的原因,您应该清楚地描述您希望从中解析出的内容。但是在处理URL的时候,NSURL
是最简单的。
当我在 Playground 中 运行 以下代码时,我得到了一个无效的范围:
import Cocoa
var error: NSError?
var captureGroups: [String] = []
var input = "http://www.google.com"
var pattern = "(https?|ftp|file|gopher|mailto|news|nntp|telnet|wais)://[a-zA-Z0-9_@]+([.:][a-zA-Z0-9_@]+)*/?[a-zA-Z0-9_?,%#~&/\-]+([:.][a-zA-Z0-9_?,%#~&/\-]+)*"
var internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error)!
if let match = internalExpression.firstMatchInString(input, options: nil, range: NSMakeRange(0, count(input))) {
match.numberOfRanges // 4
match.rangeAtIndex(0) // (0, 21)
match.rangeAtIndex(1) // (0, 4)
match.rangeAtIndex(2) // (17, 3)
match.rangeAtIndex(3) // (9223372036854775807,0)
}
此代码对其他正则表达式有效,似乎只有这个给它带来麻烦。我不是 RegEx 专家,所以我不确定应该如何进行。
你像这样做一个 if 测试:
if match.rangeAtIndex(3).location != NSNotFound {
// Do if found result.
} else {
// Handle error.
}
如果你想解析一个URL,使用NSURL
可能是最简单的:
if let url = NSURL(string: input) {
println(url.scheme)
println(url.host)
println(url.path)
println(url.pathComponents)
println(url.query)
}
如果您需要帮助修复正则表达式并理解您收到 NSNotFound
的原因,您应该清楚地描述您希望从中解析出的内容。但是在处理URL的时候,NSURL
是最简单的。