Java 中 Emoji 的正規表示式

Sunmi_Android發表於2017-03-20

一、emoji 的範圍

查閱維基百科中 emoji 的說明

1. 雜項符號及圖形

雜項符號及圖形一共有768個字元,範圍為: U+1F300 ~ U+1F5FF,在 Java 中正規表示式為:

"[\\uD83C\\uDF00-\\uD83D\\uDDFF]"複製程式碼

2. 增補符號及圖形

增補符號及圖形中一共有82個字元,範圍為: U+1F900 ~ U+1F9FF,在 Java 中正規表示式為:

"[\\uD83E\\uDD00-\\uD83E\\uDDFF]"複製程式碼

3. 表情符號

表情符號一共有80個字元,範圍為: U+1F600 ~ U+1F64F,在 Java 中正規表示式為:

"[\\uD83D\\uDE00-\\uD83D\\uDE4F]"複製程式碼

4. 交通及地圖符號

交通及地圖符號一共有103個字元,範圍為: U+1F680 ~ U+1F6FF,在 Java 中正規表示式為:

"[\\uD83D\\uDE80-\\uD83D\\uDEFF]"複製程式碼

5. 雜項符號

雜項符號一共有256個字元,範圍為: U+2600 ~ U+26FF 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u2600-\\u26FF]\\FE0F?"複製程式碼

6. 裝飾符號

裝飾符號一共有192個字元,範圍為: U+2700 ~ U+27BF 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u2700-\\u27BF]\\FE0F?"複製程式碼

7. 封閉式字母數字符號

封閉式字母數字符號中只有一個 emoji 字元,為: U+24C2 或拼上 U+FE0F,在 Java 中正規表示式為:

"\\u24C2\\uFE0F?"複製程式碼

8. 封閉式字母數字補充符號

封閉式字母數字補充符號包含41個 emoji 字元,其中26個屬於區域指示符號

8.1 區域指示符號

區域指示符號一共有26個字元,範圍為: U+1F1E6 ~ U+1F1FF,並且其中每兩個字母可以代表一個國家或地區的旗幟,在 Java 中正規表示式為:

"[\\uD83C\\uDDE6-\\uD83C\\uDDFF]{1,2}"複製程式碼
8.2 其他封閉式字母數字補充 emoji 符號

除了區域指示符號外其他的 emoji 字元為: U+1F170、 U+1F171、 U+1F17E、 U+1F17F、 U+1F18E 和 U+1F191 ~ U+1F19A 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\uD83C\\uDD70\\uD83C\\uDD71\\uD83C\\uDD7E\\uD83C\\uDD7F\\uD83C\\uDD8E\\uD83C\\uDD91-\\uD83C\\uDD9A]\\uFE0F?"複製程式碼

9. 鍵帽符號(#⃣, *️⃣ and 0⃣-9⃣)

鍵帽符號一共有12個字元,其組成方式為: U+0023、 U+002A 和 U+0030 ~ U+0039 12個鍵帽基礎字元加上 U+FE0F 和 U+20E3, 如:

"\u0023\u20E3" > "#⃣"

"\u002A\uFE0F\u20E3" > "*️⃣"

"\u0030\u20E3" > "0⃣"

"\u0039\u20E3" > "9⃣"複製程式碼

其中 uFE0F 是可選的,所以在 Java 中正規表示式為:

"[\\u0023\\u002A[\\u0030-\\u0039]]\\uFE0F?\\u20E3"複製程式碼

10. 箭頭符號

箭頭符號中有8個 emoji 字元,範圍為: U+2194 ~ U+2199 和 U+21A9 ~ U+21AA 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u2194-\\u2199\\u21A9-\\u21AA]\\uFE0F?"複製程式碼

11. 雜項符號及箭頭

雜項符號及箭頭中有7個 emoji 字元,分別為: U+2B05 ~ U+2B07、 U+2B1B、 U+2B1C、 U+2B50 和 U+2B55 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55]\\uFE0F?"複製程式碼

12. 補充箭頭符號

補充箭頭符號中有2個 emoji 字元,分別為: U+2934 和 U+2935 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u2934\\u2935]\\uFE0F?"複製程式碼

13. CJK 符號和標點

CJK (Chinese, Japanese and Korean) 符號和標點中有兩個 emoji 字元,分別為: U+3030 和 U+303D 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u3030\\u303D]\\uFE0F?"複製程式碼

14. 封閉式 CJK 字母和月份符號

封閉式 CJK 字母和月份符號中有兩個 emoji 字元,分別為:U+3297 和 U+3299 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u3297\\u3299]\\uFE0F?"複製程式碼

15. 封閉式表意文字補充符號

封閉式表意文字補充符號中有15個 emoji 字元, 分別為: U+1F201、 U+1F202、 U+1F21A、 U+1F22F、 U+1F232 ~ U+1F23A、 U+1F250、 U+1F251 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\uD83C\\uDE01\\uD83C\\uDE02\\uD83C\\uDE1A\\uD83C\\uDE2F\\uD83C\\uDE32-\\uD83C\\uDE3A\\uD83C\\uDE50\\uD83C\\uDE51]\\uFE0F?"複製程式碼

16. 一般標點

一般標點符號中有2個 emoji 字元,分別為: U+203C 和 U+2049 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u203C\\u2049]\\uFE0F?"複製程式碼

17. 幾何圖形

幾何圖形中有8個 emoji 字元,分別為: U+25AA、 U+25AB、 U+25B6、 U+25C0 和 U+25FB ~ U+25FE 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE]\\uFE0F?"複製程式碼

18. 拉丁文補充符號

拉丁文補充符號中有2個 emoji 字元,分別為: U+00A9 和 U+00AE 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u00A9\\u00AE]\\uFE0F?"複製程式碼

19. 字母符號

字母符號中有2個 emoji 字元,分別為: U+2122 和 U+2139 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u2122\\u2139]\\uFE0F?"複製程式碼

20. 麻將牌

麻將牌中只有一個 emoji 字元,為: U+1F004 或拼上 U+FE0F,在 Java 中正規表示式為:

"\\uD83C\\uDC04\\uFE0F?"複製程式碼

21. 撲克牌

撲克牌中只有一個 emoji 字元,為: U+1F0CF 或拼上 U+FE0F,在 Java 中正規表示式為:

"\\uD83C\\uDCCF\\uFE0F?"複製程式碼

22. 雜項技術符號

雜項技術符號中有18個 emoji 字元,分別為: U+231A、 U+231B、 U+2328、 U+23CF、 U+23E9 ~ U+23F3 和 U+23F8 ~ U+23FA 或拼上 U+FE0F,在 Java 中正規表示式為:

"[\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA]\\uFE0F?"複製程式碼

二、包含所有 emoji 的正規表示式

"(?:[\uD83C\uDF00-\uD83D\uDDFF]|[\uD83E\uDD00-\uD83E\uDDFF]|[\uD83D\uDE00-\uD83D\uDE4F]|[\uD83D\uDE80-\uD83D\uDEFF]|[\u2600-\u26FF]\uFE0F?|[\u2700-\u27BF]\uFE0F?|\u24C2\uFE0F?|[\uD83C\uDDE6-\uD83C\uDDFF]{1,2}|[\uD83C\uDD70\uD83C\uDD71\uD83C\uDD7E\uD83C\uDD7F\uD83C\uDD8E\uD83C\uDD91-\uD83C\uDD9A]\uFE0F?|[\u0023\u002A\u0030-\u0039]\uFE0F?\u20E3|[\u2194-\u2199\u21A9-\u21AA]\uFE0F?|[\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55]\uFE0F?|[\u2934\u2935]\uFE0F?|[\u3030\u303D]\uFE0F?|[\u3297\u3299]\uFE0F?|[\uD83C\uDE01\uD83C\uDE02\uD83C\uDE1A\uD83C\uDE2F\uD83C\uDE32-\uD83C\uDE3A\uD83C\uDE50\uD83C\uDE51]\uFE0F?|[\u203C\u2049]\uFE0F?|[\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE]\uFE0F?|[\u00A9\u00AE]\uFE0F?|[\u2122\u2139]\uFE0F?|\uD83C\uDC04\uFE0F?|\uD83C\uDCCF\uFE0F?|[\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA]\uFE0F?)"複製程式碼

可以從這裡獲取程式碼 https://github.com/zly394/EmojiRegex

ps:哪位大神對正規表示式熟悉的可以幫忙把正規表示式優化下!!!

參考文章

1. 《Emojis in Javascript》 https://medium.com/@thekevinscott/emojis-in-javascript-f693d0eb79fb#.o29wt8xei

相關文章