我试图在Swift 3中做一个简单的Regex,从输入字符串中提取一个数字。
由于我不熟悉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 objectAtIndex:]:索引1超出边界[0 .. 0]'
匹配和获取号码的正确方法是什么?
答案 0 :(得分:2)
索引从零开始,但捕获的组位于范围索引1
somestuff(str: nsUrl.substring(with: matches[0].rangeAt(1)))
你应该测试没有匹配......
关于matches(in
的返回值:
NSTextCheckingResult
个对象的数组。每个结果通过其range
属性提供整体匹配范围,并通过其rangeAt(_:)
方法提供每个捕获组的范围。如果其中一个捕获组未参与此特定匹配,则返回范围{NSNotFound, 0}
。
注意:range
实际上与rangeAt(0)