Regex NSRegularExpression异常,字符串中包含重音“é&引用;性格

Regex NSRegularExpression异常,字符串中包含重音“é&引用;性格,regex,swift,nsregularexpression,Regex,Swift,Nsregularexpression,我正在使用NSRegularExpression的stringbyreplacingmatchesisnstring方法将输入字符串分离为多个部分,以便重新排列它们。在我用一个带有重音“é”的字符串对它进行测试之前,它一直工作得很好 下面是一个XCode操场,演示了这个问题。在这个简化的示例中(虽然不是很“真实”,但它确实说明了问题),我将匹配所有内容,然后使用一个模板创建一个新字符串,该模板只会重复这些匹配:“$1-$1” 字符串“str”最后是“homér simpso-homér si

我正在使用NSRegularExpression的stringbyreplacingmatchesisnstring方法将输入字符串分离为多个部分,以便重新排列它们。在我用一个带有重音“é”的字符串对它进行测试之前,它一直工作得很好

下面是一个XCode操场,演示了这个问题。在这个简化的示例中(虽然不是很“真实”,但它确实说明了问题),我将匹配所有内容,然后使用一个模板创建一个新字符串,该模板只会重复这些匹配:“$1-$1”

字符串“str”最后是“homér simpso-homér simpson”。正如您所看到的,$1的第一个实例被截断了1个字符,我发现这是因为重音“é”。如果你把它编辑成一个简单的“e”,就可以了

但奇怪的是。如果您再次编辑它以将重音“é”放回字符串中,它的行为应该是这样的,并且不会截断


我倾向于怀疑传递给该方法的范围,但我认为count()足够聪明,可以处理unicode字符的存在?

我认为我已经解决了这个问题,使用这个范围:

let r = NSMakeRange(0, count(test.utf16))

不完全确定为什么utf16是必要的,但我不能对结果提出异议。

我想我已经解决了这个问题,使用这个范围:

let r = NSMakeRange(0, count(test.utf16))
不完全确定为什么utf16是必要的,但我不能对结果提出异议