我在理解使用 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/