【问题标题】:NSRegularExpression anomaly with string containing accented "é" characterNSRegularExpression 异常,字符串包含重音“é”字符
【发布时间】: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


    【解决方案1】:

    我想我已经解决了这个问题:

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

    不完全确定为什么需要 utf16,但我无法反驳结果。

    【讨论】:

      猜你喜欢
      • 2013-10-24
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2011-09-29
      • 2018-09-10
      • 2015-11-09
      • 1970-01-01
      • 2010-11-10
      相关资源
      最近更新 更多