来自正则表达式的 Swift 3 提取组 - NS 桥接混乱



我正在尝试在 Swift 3 中做一个简单的正则表达式,从输入字符串中提取一个数字。

由于我不熟悉iOS,因此事实证明这是一个相当大的挑战。我高度怀疑我的错误在于同时使用StringNSString

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)相同

最新更新