Как я могу использовать NSRegularExpression для строк Swift с символами Unicode переменной ширины?

У меня проблемы с получениемNSRegularExpression сопоставлять шаблоны в строках с более широкими (?) символами Unicode в них. Похоже, что проблема заключается в параметре диапазона - Swift подсчитывает отдельные символы Unicode, в то время как Objective-C обрабатывает строки так, как если бы они состояли из единиц кода UTF-16.

Вот моя тестовая строка и два регулярных выражения:

let str = "dogcow"
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.

Ответы на вопрос(1)

Ваш ответ на вопрос