博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
推断汉字正則表達式更严谨方法!
阅读量:5363 次
发布时间:2019-06-15

本文共 1522 字,大约阅读时间需要 5 分钟。

-------------------------------------------欢迎查看字符编码【】------------------------------------------------------------------

汉字编码之GBK编码【】                                              推断汉字正則表達式更严谨方法【】
记事本输入“联通”俩字。关闭再打开乱码 【】              iPhone emoji问题牵出的Unicode代理区的思考【】
Unicdoe【真正的完整码表】对比表【】                      开源projectZipArchive,压缩中文文件名称乱码问题【】
base64加密。解密。encode。decode,编码具体解释+实现【】 
网络传输文本。urlEncode和urldecode的iOS实现【】 字符编码的奥秘utf-8, Unicode【】
--------------------------------------------------------------------------------------------------------------------------------------------------

一、通常做法

正如网上流传的。推断中文的正則表達式,绝大部分是这么写的(OC语言):

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"[\u4e00-\u9fa5]"];/*推断是否为中文的正則表達式*/if([predicate evaluateWithObject:name]){   //是中文}else{   //不是中文}

然而上面的正則表達式,逻辑上讲并不严谨:比方一些生僻字的Unicode不在0x4e00-0x9FA5之间<>,那么它不能正确识别出来:比方一些四叠字:

另外另一些偏旁部首。有时候也会作为一个字出现。可是偏旁部首的Unicode相同不在0x4e00-0x9FA5之间,以下分别举例偏旁部首。叠字:

举几个例:

下载unicode和utf-8的转换工具。

如四个日的汉字,执行结果确“不是汉字”

二、原因

(如果你已经了解unicode的编码规则。和编码实现(utf-8);如果不了解。 )

中国71226个汉字。分别分布在Unicode第0个平面。经常使用27973个,第2个平面43253个。而[\u4e00-\u9fa5]仅仅是代表了大约20901个汉字。剩余的汉字都在第2个平面(这部分可能是生僻字。非常少使用)。

换句话说:流行的正则仅仅能检測少部分汉字。却能够检測绝大部分经常使用汉字。

三、更严谨的做法

所以。在进行正則表達式的时候须要把第二平面的汉字囊括进去。

更严谨的正則表達式应该是这种:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@|%@”,@“[\u4e00-\u9fa5],@“[\uDB40DC00-\uDB7FDFFF]”];
//注意这是伪代码,不能执行。非常遗憾眼下正則表達式不支持四个字节unicode的表示。
为什么是[\uDB40DC00-\uDB7FDFFF]:这里须要说名一下utf-16代理区:依据unicode的规则,第0平面是直接utf-8表示。第1到第16平面是通过代理区表示的。

——了解utf-8编码和代理区的概念。

转载于:https://www.cnblogs.com/gcczhongduan/p/5320211.html

你可能感兴趣的文章
人工智能实验报告一
查看>>
用LR12录制app,用LR11跑场景,无并发数限制,已试验过,可行!
查看>>
python 多线程就这么简单(转)
查看>>
oracle 简述
查看>>
ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
查看>>
Solr之java实现增删查操作
查看>>
httpClient连接工具类实测可用
查看>>
CDOJ 1965 连通域统计【DFS】
查看>>
飞机大战3-我的飞机
查看>>
c#接口
查看>>
MyEclipse部署Jboss出现java.lang.OutOfMemoryError: PermGen space
查看>>
ZOJ 1133
查看>>
HIVE和HADOOP的一些东西
查看>>
alibaba / zeus 安装 图解
查看>>
Planned Delivery Time as Work Days (SCN discussion)
查看>>
Ubuntu:让桌面显示回收站
查看>>
Android上传头像代码,相机,相册,裁剪
查看>>
git 安装体验
查看>>
Oracle 给已创建的表增加自增长列
查看>>
《DSP using MATLAB》Problem 2.17
查看>>