2
当我运行在操场下面的代码,我得到一个无效的范围,结果:NSRegularExpression返回无效范围
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)://[[email protected]]+([.:][[email protected]]+)*/?[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专家,所以我不确定我应该如何继续。
这里的工作https://regex101.com/r/nK7oK0/2 –
9223372036854775807是NSIntegerMax aka NSNotFound,即没有匹配的最后一个捕获组。你期望什么结果? –
@MartinR我本来期望这场比赛失败,但我不是RegEx专家。有没有一种首选的方法来测试这种情况?我对可可也比较陌生。 – user3338852