从NSString中提取表情符号(Unicode) [英] Extract emoji (unicode) from NSString
本文介绍了从NSString中提取表情符号(Unicode)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我必须分析一些字符串并提取表情符号。
我找不到好的解决方案来做这件事。
假设我有这个字符串:
"xxx👦🏿sss🤖"
如何获取这两个表情符号?
请注意:"👦🏿==👦+🏿(表情修饰符Fitzpatrick Type-6)"
推荐答案
此代码只能在最新的iOS 10SDK中运行,无法检测到一些组合的emoji,但如果您觉得可以,请尝试:
func emojis(_ str: String) -> [String] {
//You may need to add some extra characters as "Umbrella on ground" does not have property "Emoji_Presentation".
let emojiPattern1 = "[\p{Emoji_Presentation}\u26F1]" //Code Points with default emoji representation
let emojiPattern2 = "\p{Emoji}\uFE0F" //Characters with emoji variation selector
let emojiPattern3 = "\p{Emoji_Modifier_Base}\p{Emoji_Modifier}" //Characters with emoji modifier
let emojiPattern4 = "[\U0001F1E6-\U0001F1FF][\U0001F1E6-\U0001F1FF]" //2-letter flags
let pattern = "(emojiPattern4)|(emojiPattern3)|(emojiPattern2)|(emojiPattern1)"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let matches = regex.matches(in: str, options: [], range: NSRange(0..<str.utf16.count))
return matches.map{(str as NSString).substring(with: $0.range)}
}
print(emojis(" xxx 👦🏿 sss 🤖 ")) //->["👦🏿", "🤖"]
(更新)删除了上述代码中的一些错误。再试着检测一些组合的表情符号。
func emojisIncludingCombined(_ str: String) -> [String] {
//You may need to add some extra characters as "Umbrella on ground" does not have property "Emoji_Presentation".
let emojiPattern1 = "[\p{Emoji_Presentation}\u26F1]" //Code Points with default emoji representation
let emojiPattern2 = "\p{Emoji}\uFE0F" //Characters with emoji variation selector
let emojiPattern3 = "\p{Emoji_Modifier_Base}\p{Emoji_Modifier}" //Characters with emoji modifier
let emojiPattern4 = "[\U0001F1E6-\U0001F1FF][\U0001F1E6-\U0001F1FF]" //2-letter flags
let pattern = "(emojiPattern4)|(emojiPattern3)|(emojiPattern2)|(emojiPattern1)"
let combinedPattern = "(?:(pattern))(?:\u200D(?:(pattern)))*"
let regex = try! NSRegularExpression(pattern: combinedPattern, options: [])
let matches = regex.matches(in: str, options: [], range: NSRange(0..<str.utf16.count))
return matches.map{(str as NSString).substring(with: $0.range)}
}
print(emojisIncludingCombined("a👍🏼b👨❤️💋👨c🇯🇵")) //->["👍🏼", "👨❤️💋👨", "🇯🇵"]
更新2
在Swift 2/iOS 9 SDK中运行的示例。
func emojis(str: String) -> [String] {
//You may need to add "refine" (or "tune") emojiPattern1...emojiPattern4.
let emojiPattern1 = "[\u2600-\u27BF\U0001F300-\U0001F77F\U0001F900-\U0001F9FF]" //Code Points with default emoji representation
let emojiPattern2 = "[\u2600-\u27BF\U0001F300-\U0001F77F\U0001F900–\U0001F9FF]\uFE0F" //Characters with emoji variation selector
let emojiPattern3 = "[\u2600-\u27BF\U0001F300-\U0001F77F\U0001F900–\U0001F9FF][\U0001F3FB-\U0001F3FF]" //Characters with emoji modifier
let emojiPattern4 = "[\U0001F1E6-\U0001F1FF][\U0001F1E6-\U0001F1FF]" //2-letter flags
let pattern = "(emojiPattern4)|(emojiPattern3)|(emojiPattern2)|(emojiPattern1)"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let matches = regex.matchesInString(str, options: [], range: NSRange(0..<str.utf16.count))
return matches.map{(str as NSString).substringWithRange($0.range)}
}
let str1 = "Hello, my name is Jason 😀 🐸 how are you ?"
let str4 = "I am going to the ⛱beach with some 🙉monkeys 👏"
let str5 = "🇯🇵Japan 👦🏻boy ♏️Scorpis" //="u{1F1EF}u{1F1F5}Japan u{1F466}u{1F3FB}boy u{264f}u{FE0F}Scorpis"
let str6 = " xxx 👦🏿 sss 🤖 "
let str7 = "a👍🏼b👨❤️💋👨"
print(emojis(str1)) //->["😀", "🐸"]
print(emojis(str4)) //->["⛱", "🙉", "👏"]
print(emojis(str5)) //->["🇯🇵", "👦🏻", "♏️"]
print(emojis(str6)) //->["👦🏿", "🤖"]
print(emojis(str7)) //->["👍🏼", "👨", "❤️", "💋", "👨"]
func emojisIncludingCombined(str: String) -> [String] {
//You may need to add "refine" (or "tune") emojiPattern1...emojiPattern4.
let emojiPattern1 = "[\u2600-\u27BF\U0001F300-\U0001F77F\U0001F900-\U0001F9FF]" //Code Points with default emoji representation
let emojiPattern2 = "[\u2600-\u27BF\U0001F300-\U0001F77F\U0001F900–\U0001F9FF]\uFE0F" //Characters with emoji variation selector
let emojiPattern3 = "[\u2600-\u27BF\U0001F300-\U0001F77F\U0001F900–\U0001F9FF][\U0001F3FB-\U0001F3FF]" //Characters with emoji modifier
let emojiPattern4 = "[\U0001F1E6-\U0001F1FF][\U0001F1E6-\U0001F1FF]" //2-letter flags
let pattern = "(emojiPattern4)|(emojiPattern3)|(emojiPattern2)|(emojiPattern1)"
let combinedPattern = "(?:(pattern))(?:\u200D(?:(pattern)))*"
let regex = try! NSRegularExpression(pattern: combinedPattern, options: [])
let matches = regex.matchesInString(str, options: [], range: NSRange(0..<str.utf16.count))
return matches.map{(str as NSString).substringWithRange($0.range)}
}
print(emojisIncludingCombined(str7)) //->["👍🏼", "👨❤️💋👨"]
如代码中所述,emojiPattern1
...emojiPattern4
并不代表iOS中可用的完整表情符号集。(包括SWIFT 3的代码。)您可能需要修改图案。
这篇关于从NSString中提取表情符号(Unicode)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文