一、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

作者:zly394
链接:https://juejin.im/post/58cfd4a6570c350058ae6f7d
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Java 中 Emoji 的正则表达式的更多相关文章

  1. JAVA中的email正则表达式

    说到正则表达式,网上有很多的通用的表达式,可是事实上说来,一般人的都 不愿意去拿来研究,就是拿来就直接用就行了.可是,事实上,可能有些时候,项目中或公司里的实际情况不一样,得要修改一下正则表达式的,根 ...

  2. Java中常用的正则表达式判断,如IP地址、电话号码、邮箱等

    java中我们会常用一些判断如IP.电子邮箱.电话号码的是不是符合,那么我们怎么来判断呢,答案就是利用正则表达式来判断了,因为本人对正则表达式没有太深的研究,所有感兴趣的朋友可以自行百度.我这就给基本 ...

  3. Java中常用的正则表达式

    常用的正则表达式 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的 ...

  4. Java中怎么简单的使用正则表达式?

    对于正则表达式,我通常的认识就是通过一些陌生的奇怪的符号就可以完成很复杂事件的好帮手!实际上正则表达式确实是这方面的好助手,接下来让我们一起认识一下Java中怎么使用正则表达式吧. 初见Pattern ...

  5. 9.JAVA中的正则表达式

    一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ?          #{0,1}-?有一个-或者没有 \\           #表示一个" ...

  6. java中正则表达式基本用法

    正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...

  7. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  8. Java中正则表达式、模式匹配与信息抽取

    引言 记得几年前在做网页爬虫后的信息抽取时,针对网页源码中隐藏的要提取的信息,比如评论.用户信息等属性信息,直接利用HtmlParser得到.如此做倒是简单,不过利用的是网页的规范的tag标记.其实j ...

  9. Java中正则表达式的使用

    public class Test{ public static void main(String args[]) { String str="@Shang Hai Hong Qiao Fe ...

随机推荐

  1. AutoFac简介

    在.NET上现在存在许多的依赖注入容器, 如:Castle Windsor.StructureMap.Autofac .Unity. 这里主要介绍一下Autofac,Autofac和其他容器的不同之处 ...

  2. 小tip: base64:URL背景图片与web页面性能优化——张鑫旭

    一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什 ...

  3. UVAlive6807 Túnel de Rata (最小生成树)

    题意 题目链接 Sol 神仙题Orz 我们考虑选的边的补集,可以很惊奇的发现,这个补集中的边恰好是原图中的一颗生成树: 并且答案就是所有边权的和减去这个边集中的边的权值: 于是我们只需要求最大生成树就 ...

  4. H5学习入门

    [块级标签与行级标签的区别] 1.块级标签: 默认宽度100%(独占一行) 自动换行(右边不能有任何东西) 可以使用css设置宽度高度   2.行级标签: 内容宽度,由内容撑开(内容多宽,宽度就占多宽 ...

  5. mysql if()

    类似三元运算符 ,"男","女") 结果:

  6. 重要BLOG

    Cloud http://www.cnblogs.com/CloudMan6/tag/OpenStack/ 算法基础 http://www.cnblogs.com/ECJTUACM-873284962 ...

  7. 你真的了解View的坐标吗?

    闲聊 View,对我们来说在熟悉不过了,从接触 Android 开始,我们就一直在接触 View,界面当中到处都是 View,比如我们经常用到的 TextView,Button,LinearLayou ...

  8. MyBatis -01- 初识 MyBatis + MyBatis 环境搭建

    MyBatis -01- 初识 MyBatis + MyBatis 环境搭建 MyBatis 本是 apache 的一个开源项目 iBatis(iBATIS = "internet" ...

  9. 如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序

    负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...

  10. Sql Server中的谓词和运算符

    谓词和运算符配合使用是我们得到理想数据的最佳途径. 一.浅谈谓词 谓词的概念:一个运算结果为True.False或Unknown的逻辑表达式.它的运用范围有:where子句.Having子句.Chec ...