我是 swift 的新手,想使用正则表达式匹配所有 unicode 字符串
例如: var s="😀表情符号😀" 当我解码上面的字符串时,结果是: “\ud83d\ude00 表情符号\ud83d\ude00”
我想用 say * 替换每个表情符号
在 java 中,我将正则表达式用作: “[\uD800-\uDBFF\uDC00-\uDFFF]”并且正在工作
在 swift 中,我使用了相同的正则表达式,但它用 * 替换了每个字符
我希望结果为 * 表情符号 *
非常感谢您的帮助
最佳答案
您显示的表情符号的 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
关于ios - Swift 正则表达式匹配 unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38408645/