在EmEditor中怎样正则匹配所有扩展区汉字?

在网上找了一圈,没找到方法
以下方法,在EmEditor中没用!
也就是除了[一-龥]基本区之外的,所有汉字,用正则匹配。

提到用正则表达式匹配汉字,很容易搜到这个[\u4e00-\u9fa5],但是它不算全面,不包含一些生僻汉字。
本文对此问题做一个梳理。
以下是比较全面的汉字Unicode分布,截止Unicode 8.0标准(2015年6月):
区块	范围	实际汉字个数	正则式
CJK统一汉字	
4E00-62FF, 6300-77FF,
7800-8CFF, 8D00-9FFF.
20,950	[\u4E00-\u9FFF]
CJK统一汉字扩展A区	3400-4DBF.	6,582	[\u3400-\u4DBF]
CJK兼容汉字	F900–FAFF.	472	[\uF900-\uFAFF]
CJK统一汉字扩展B区	
20000-215FF, 21600-230FF,
23100-245FF, 24600-260FF,
26100-275FF, 27600-290FF,
29100-2A6DF.
42,711	[\U00020000-\U0002A6D6]
CJK统一汉字扩展C区	2A700-2B73F.	4,149 	[\U0002A700-\U0002B73F]
CJK统一汉字扩展D区	2B740–2B81F.	222	[\U0002B740-\U0002B81F]
CJK统一汉字扩展E区	2B820–2CEAF.	5,762	[\U0002B820-\U0002CEAF]
 
如果想表示最普遍的汉字,用:
[\u4E00-\u9FFF]
如果想表示BMP之内的汉字,也就是Unicode值<=0xFFFF,用:
[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]
这个包含但不限于GBK定义的汉字
如果想表示尽可能所有的汉字,用:
[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF\U00020000-\U0002CEAF]
这个包含上表的8万多个汉字
说明:
1, 以上正则表达式不会匹配(英文、汉字的)标点符号。
2, 包含了一些没有汉字的空位置,这个无所谓。
3, 在Python 3.5上测试通过。

補充編碼表

字符集	字数	Unicode 编码
基本汉字	20902字	4E00-9FA5
基本汉字补充	38字	9FA6-9FCB
扩展A	6582字	3400-4DB5
扩展B	42711字	20000-2A6D6
扩展C	4149字	2A700-2B734
扩展D	222字	2B740-2B81D
康熙部首	214字	2F00-2FD5
部首扩展	115字	2E80-2EF3
兼容汉字	477字	F900-FAD9
兼容扩展	542字	2F800-2FA1D
PUA(GBK)部件	81字	E815-E86F
部件扩展	452字	E400-E5E8
PUA增补	207字	E600-E6CF
汉字笔画	36字	31C0-31E3
汉字结构	12字	2FF0-2FFB
汉语注音	22字	3105-3120
注音扩展	22字	31A0-31BA
〇	1字	3007

不同工具或语言的实现会有差别,PCRE可以使用:

[\x{3400}-\x{4DB5}\x{4DB6}-\x{4DBF}\x{9FA6}-\x{9FBB}\x{9FBC}-\x{9FC3}\x{9FC4}-\x{9FCB}\x{9FCC}\x{9FCD}-\x{9FD5}\x{9FD6}-\x{9FEA}\x{9FEB}-\x{9FEF}\x{9FF0}-\x{9FFC}\x{9FFD}-\x{9FFF}\x{F900}-\x{FA2D}\x{FA2E}-\x{FA2F}\x{FA30}-\x{FA6A}\x{FA6B}-\x{FA6D}\x{FA70}-\x{FAD9}\x{20000}-\x{2A6D6}\x{2A6D7}-\x{2A6DD}\x{2A6DE}-\x{2A6DF}\x{2A700}-\x{2B734}\x{2B735}-\x{2B738}\x{2B740}-\x{2B81D}\x{2B820}-\x{2CEA1}\x{2CEB0}-\x{2EBE0}\x{2F800}-\x{2FA1D}\x{30000}-\x{3134A}]

2 Likes

这个在EmEditor中无效

看来EmEditor默认的正则引擎比较弱。

既然不支持pcre,试下自定义->搜索,把正则引擎切换成Onigmo看看。

1 Like

謝謝!果然可以 :+1: