ios - Swift 正则表达式匹配 unicode

标签 ios regex swift unicode

我是 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/

相关文章:

当 R 中以小写字母开头时,从数据框单元格中删除第一个单词

python - 正则表达式仅用于字符串中的数字?

ios - 如何使用 AVPlayerViewController 检测播放控件显示的切换?

ios - iOS是否延迟peripheralManager :didReceiveWriteRequests: and peripheralManager:didReceiveReadRequest:?

objective-c - UITableView 以编程方式选择选项

ios - DDMathParser:解析包含 $ 的动态公式以引用字典中的对象值

regex - 所有正则表达式都会停止吗?

iOS 8 : Background execution

ios - NSOperationQueue 内的 NSOperation 中的异步回调永远不会被调用

ios - 解析 .osm XML 数据以获取经度/纬度坐标