4e00 到 9fa5 是 UTF-16 的 …… 而且不能匹配一些生僻汉字。
Ruby 1.9 比较好办,但是 1.8.6 目前用得最广泛,下面给几个 1.8 下面的解决方案。
方案一:匹配 UTF-16
先准备待测字符串 s。
如果在编码为 utf-8 的源文件中
如果在 windows 控制台下
注意一个汉字是两字节,所以把正则改写成:
方案二:匹配 utf-8
UTF-8 是 UTF-16 插入一些东西弄成的:
1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
所以汉字码点是从 e4b880 到 e9bea5,写成正则就是 4 段……
/xe4[/xb8-/xbf][/x80-/xbf]
[/xe5-/xe8][/x80-/xbf][/x80-/xbf]
/xe9[/x80-/xbd][/x80-/xbf]
/xe9/xbe[/x80-/xa5]
结论,先保证字符串 s 的编码是 UTF-8 (在 rails 应用中一般全部都默认是 UTF-8),然后