NSRegularExpression捕获组澄清

时间:2016-09-20 16:13:49

标签: 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))
}

因此,当我打印result的长度时,我得到1。这意味着找到的表达式范围应该在result[0]中。但是如何在result[0]中出现被捕群体?我在想错吗?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

  • 如果正则表达式不匹配result.count为0且result[0]崩溃,因为没有第一项。