我是swift的新手,想要使用正则表达式匹配所有unicode字符串
例如: var s ="表情符号" 当我解码上面的字符串时,结果是: " \ ud83d \ ude00 表情符号 \ ud83d \ ude00 "
我想用say *
替换每个表情符号在java中我使用正则表达式: " [\ uD800- \ uDBFF \ uDC00- \ uDFFF]"并且正在工作
在swift中我使用相同的正则表达式,但用*
替换每个字符我希望结果为* emoji *
非常感谢帮助
答案 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