arrays - NSRegularExpression 捕获组澄清

标签 arrays swift

我在理解使用 NSRegularExpression 获取捕获组时遇到了一些问题

let string = "QWERTY123 ASDFGH"
let nsString = string as NSString
let regex = try! NSRegularExpression(pattern: "(\\D+)\\d+\\s(\\D+)", options: [])
let result = regex.matchesInString(string, options: [], range: NSMakeRange(0, nsString.length))

print(result.count) // prints length of array
for r in 1..<result[0].numberOfRanges
{
    print(nsString.substringWithRange(result[0].rangeAtIndex(r))) // prints captured groups
}
for r in result
{
    print(nsString.substringWithRange(r.range))
}

因此,当我打印结果的长度时,我得到1。这意味着找到的表达式的范围应该在result[0]中。但是result[0]中怎么会出现捕获的组呢?我是不是想错了?

下一个是,当我将正则表达式指定为 (QWE)t 时,捕获的组循环崩溃。如何返回 nil 或其他内容来指示没有使用以下正则表达式捕获的组?

谢谢!

最佳答案

  • matchesInString返回正则表达式的所有匹配项(忽略捕获的组)。
    在您的示例中,有一个匹配项。
  • 匹配的第一个索引处的范围 ( result ) 是没有捕获组的正则表达式的匹配范围 ( {0, 16} )。
  • 范围 1..<numberOfRanges表示捕获组的范围。

  • 如果正则表达式不匹配result.count是 0 和 result[0]由于没有第一项而崩溃。

关于arrays - NSRegularExpression 捕获组澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39599061/

相关文章:

java - 如何使用Mybatis和PostgreSQL创建一个空数组?

javascript - 使用 lodash 方法返回新形式的数组

编译器没有看到我的元素被添加到我的数组中

ios - 从谷歌地图 View 获取纬度/经度

ios - 如何获取多个 DispatchWorkItems 的取消状态

php - 我想理解这段 PHP 代码(来自 Laravel app.php 配置文件)

c - 根据另一个数组中定义的排序顺序对数组进行适当排序

ios - 如何在 Swift 中对字符串进行切片?

json - 在 Swift 5.1 中循环多维/嵌套 JSON 数据

ios - UITextField文字颜色透明