适用于中日韩的正则表达式

之前我在 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 测试通过。

备注

  1. 为什么我会选择用「字」而不是 Unicode 编码来匹配呢?因为五位 Unicode 编码的支持实在不能统一,用字的话,我常用的语言都可以兼容,省事。
  2. 如果看到的是方块字,那是正常的,虽然显示不出来,但仍旧是那个编码。

参考资料: