ios - 来自 Regex 的 Swift 3 提取组 - NS 桥接困惑

标签 ios swift swift3

我正在尝试在 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))

失败并出现以下异常:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

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

最佳答案

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

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

无论如何你应该测试没有匹配......


关于matches(in)的返回值:

An array of NSTextCheckingResult objects. Each result gives the overall matched range via its range property, and the range of each individual capture group via its rangeAt(_:) method. The range {NSNotFound, 0} is returned if one of the capture groups did not participate in this particular match.

注意:range其实和rangeAt(0)是一样的

关于ios - 来自 Regex 的 Swift 3 提取组 - NS 桥接困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41653888/

相关文章:

swift - 如何让一个节点按时间顺序替换另一个节点?

ios - 如何使用 Swift 在 iOS 上获取 ISO 639-2 国家代码

快速浏览字典

ios - 选择器函数未在 iOS Swift 中调用

ios - 如何将约束转换为 VFL

ios - 接收器 :null error when trying to save form using globalKey

objective-c - 带有 imageFromCurrentlyProcessedOutput 的 GPUImagePicture 没有得到 UIImage

iphone - UISearchBar 中范围按钮文本的颜色

swift - 如何在 Swift 3 的 TableViewController 中添加一个通用按钮

ios - 使用 FRC Swift 3 更改 CoreData 后,TableView 不会更新(reloadData)