我无法获取NSRegularExpression
匹配字符串中含有较宽 (?) Unicode 字符的模式。看起来问题出在范围参数上——Swift 计算单个 Unicode 字符,而 Objective-C 将字符串视为由 UTF-16 代码单元组成。
这是我的测试字符串和两个正则表达式:
let str = "dog????????cow"
let dogRegex = NSRegularExpression(pattern: "d.g", options: nil, error: nil)!
let cowRegex = NSRegularExpression(pattern: "c.w", options: nil, error: nil)!
我可以毫无问题地匹配第一个正则表达式:
let dogMatch = dogRegex.firstMatchInString(str, options: nil,
range: NSRange(location: 0, length: countElements(str)))
println(dogMatch?.range) // (0, 3)
但第二个使用相同的参数失败,因为我发送它的范围(0...7)不够长,无法覆盖整个字符串NSRegularExpression
被关注到:
let cowMatch = cowRegex.firstMatchInString(str, options: nil,
range: NSRange(location: 0, length: countElements(str)))
println(cowMatch.range) // nil
如果我使用不同的范围,我可以使匹配成功:
let cowMatch2 = cowRegex.firstMatchInString(str, options: nil,
range: NSRange(location: 0, length: str.utf16Count))
println(cowMatch2?.range) // (7, 3)
但我不知道如何从字符串中提取匹配的文本,因为该范围超出了 Swift 字符串的范围。