Swift正则表达式匹配unicodes

时间:2016-07-16 06:56:27

标签: ios regex swift unicode

我是swift的新手,想要使用正则表达式匹配所有unicode字符串

例如: var s ="表情符号" 当我解码上面的字符串时,结果是: " \ ud83d \ ude00 表情符号 \ ud83d \ ude00 "

我想用say *

替换每个表情符号

在java中我使用正则表达式: " [\ uD800- \ uDBFF \ uDC00- \ uDFFF]"并且正在工作

在swift中我使用相同的正则表达式,但用*

替换每个字符

我希望结果为* emoji *

非常感谢帮助

1 个答案:

答案 0 :(得分:3)

您显示的表情符号的Unicode代码点是U + 1F600。

Unicode 9.0 Character Code Charts - Emoticons

你的正则表达式模式(可能适用于UTF-16表示)[\uD800-\uDBFF\uDC00-\uDFFF]匹配所有非BMP字符 - U + 10000 ... U + 10FFFF,其中包含大部分所有表情符号但也包含巨大的非表情符号。

所以,正如你所说" [\ uD800- \ uDBFF \ uDC00- \ uDFFF]"工作正常,NSRegularExpression中的等效模式为"[\\U00010000-\\U0010FFFF]"

var s=" emoji "
let regex = try! NSRegularExpression(pattern: "[\\U00010000-\\U0010FFFF]", options: [])
let replaced = regex.stringByReplacingMatchesInString(s, options: [], range: NSRange(0..<s.utf16.count), withTemplate: "*") //->"* emoji *"

(加) 要查看字符串文字中的Unicode代码点:

s.unicodeScalars.forEach {
    print(String(format: "U+%04X ", Int($0.value)))
}

对于您的示例字符串,我得到:

U+1F600 
U+0020 
U+0065 
U+006D 
U+006F 
U+006A 
U+0069 
U+0020 
U+1F600