之前我在 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 编码的支持实在不能统一,用字的话,我常用的语言都可以兼容,省事。
- 如果看到的是方块字,那是正常的,虽然显示不出来,但仍旧是那个编码。
参考资料: