【发布时间】:2015-09-17 00:46:11
【问题描述】:
我正在使用 NSRegularExpression 的 stringByReplacingMatchesInString 方法将输入字符串分成几部分,以便我可以重新排列它们。在我针对包含重音“é”的字符串进行测试之前,这一直运行良好。
这是一个演示问题的 XCode 游乐场。在这个精简的示例中(它不是很“真实世界”,但它确实证明了问题),我匹配所有内容,然后使用模板创建一个新字符串,该模板简单地重复这些匹配:“$1 - $1”。
import Cocoa
var err: NSError?
var regex = NSRegularExpression(pattern: "^(.*?)$", options: nil, error: &err)
let test = "homér simpson"
let r = NSMakeRange(0, count(test))
var str = regex!.stringByReplacingMatchesInString(test, options: nil, range: r, withTemplate: "$1 - $1")
字符串“str”最终成为“homér simpso - homér simpson”。如您所见,$1 的第一个实例被 1 个字符截断,我发现这是因为重音的“é”。如果您将其编辑为使用普通的“e”,那很好。
但奇怪的是。如果您再次编辑它以将带重音的“é”放回字符串中,它的行为就像它应该的那样并且不会截断。
我倾向于怀疑传递给方法的范围,但我认为 count() 足够聪明,可以处理 unicode 字符的存在?
【问题讨论】:
标签: regex swift nsregularexpression