之前我在 Twitter 发过用于匹配中文的正则表达式,但是发的表达式并不是很严谨,只是一个粗略的匹配,今天就进行补完吧。
FYI,如果是用 Ruby,用内置的集合吧,如 /\p{Han}/,最省事,详情看文档。
汉字匹配
[一 -鿌] 是 4E00–9FCC 段。这个是最常用的汉字集。
[㐀-䶵] 是 3400–4DBF 段。
[𠀀-𪛖] 是 20000–2A6D6 段。
[𪜀-𫠝] 是 2A700–2B81F 段。
[⺀-⿕] 是 2E80–2FDF 段。
[豈-舘] 是 F900-FA6D 段。
[你-鼖] 是 2F800-2FA1B 段。
在 Objective-C 里可以任意用上面的集合进行组合。
Python 不会用,简单的测试发现 u"[𠀀-𪛖]" 会导致报错,不加 u 匹配出来的会是别的字符,。
# -*- coding:utf-8 -*-
import re
prog = re.compile(u'[𠀀-𫠚]')
result = prog.match(u'𠀀')
print result
For JavaScript
JS 对五位的 Unicode 编码支持有问题,比如 𠀀 不管是以单字还是 \uD840\uDC00 方式是可以匹配,但是作为范围,如 [𠀀-𪛖] 会抛出 Range out of order in character class 异常。
如有需要,建议使用 [一 -鿋] 和 [㐀-𫠚]。
日文五十音匹配
相对于汉字,这个难度就大降:
[ぁ - ヶ゛゜ー]
JavaScript、Objective-C、Python 和 Ruby 测试通过。
韩文匹配
[가-힝]
不懂韩文,大致就是这样吧?
JavaScript、Objective-C、Python 和 Ruby 测试通过。
备注
- 为什么我会选择用「字」而不是 Unicode 编码来匹配呢?因为五位 Unicode 编码的支持实在不能统一,用字的话,我常用的语言都可以兼容,省事。
- 如果看到的是方块字,那是正常的,虽然显示不出来,但仍旧是那个编码。
参考资料: