我对使用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
或其他内容以表明没有捕获的组具有以下正则表达式?
谢谢!
答案 0 :(得分:0)
matchesInString
返回正则表达式的所有匹配项(忽略捕获的组)
在您的示例中,一个匹配。result
)的范围是没有捕获的组({0, 16}
)的正则表达式的匹配范围。范围1..<numberOfRanges
表示捕获的组的范围。
如果正则表达式不匹配result.count
为0且result[0]
崩溃,因为没有第一项。