我正在尝试在 Swift 3 中做一个简单的正则表达式,从输入字符串中提取一个数字。
由于我不熟悉iOS,因此事实证明这是一个相当大的挑战。我高度怀疑我的错误在于同时使用String
和NSString
。
let url = "a5b"
let nsUrl = url as NSString
let regex = try! NSRegularExpression(pattern: "a(\d)b", options: [])
let matches = regex.matches(in: url, options: [], range: NSRange(location: 0, length: url.characters.count))
somestuff(str: nsUrl.substring(with: matches[1].range))
失败,出现以下异常:
由于未捕获的异常"NSRangeException"而终止应用,原因:"*** -[__NSSingleObjectArrayI对象索引:]:索引 1 超出边界 [0 .. 0]"
匹配和获取号码的正确方法是什么?
索引从零开始,但捕获的组位于范围索引 1
somestuff(str: nsUrl.substring(with: matches[0].rangeAt(1)))
无论如何,您应该测试没有匹配项...
关于matches(in
的返回值:
NSTextCheckingResult
对象的数组。每个结果通过其range
属性给出总体匹配范围,并通过其rangeAt(_:)
方法给出每个单独捕获组的范围。如果其中一个捕获组未参与此特定匹配,则返回范围{NSNotFound, 0}
。
注意:range
实际上与rangeAt(0)
相同