来自Regex的Swift 3提取物组 - NS-bridging mess

时间:2017-01-14 19:10:10

标签: ios swift swift3

我试图在Swift 3中做一个简单的Regex,从输入字符串中提取一个数字。

由于我不熟悉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 objectAtIndex:]:索引1超出边界[0 .. 0]'

匹配和获取号码的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

索引从零开始,但捕获的组位于范围索引1

somestuff(str: nsUrl.substring(with: matches[0].rangeAt(1)))

你应该测试没有匹配......

关于matches(in的返回值:

  

NSTextCheckingResult个对象的数组。每个结果通过其range属性提供整体匹配范围,并通过其rangeAt(_:)方法提供每个捕获组的范围。如果其中一个捕获组未参与此特定匹配,则返回范围{NSNotFound, 0}

注意:range实际上与rangeAt(0)

相同