如何在Ruby中匹配中文单词?

时间:2014-09-25 07:39:09

标签: ruby regex encoding chinese-locale

我想在一个字符串中匹配中文单词,但它失败了

irb(main):016:0> "身高455478".scan(/\p{Han}/)
SyntaxError: (irb):16: invalid character property name {Han}: /\p{Han}/
    from C:/Program Files/Ruby-2.1.0/bin/irb.bat:18:in `<main>'

它出了什么问题?

问题很奇怪,是字符编码问题吗?

1 个答案:

答案 0 :(得分:4)

我可以在irb中重现这个问题。我的Ruby环境与无法重现问题的其他环境之间的区别在于,我在irb中的编码默认为GBK,适用于中文。

这可以重现问题:

#encoding:GBK
p "身高455478".scan(/\p{Han}/)

显示错误:invalid character property name {Han}: /\p{Han}/

要解决此问题,请使用UTF-8编码:

#encoding:utf-8
p "身高455478".scan(/\p{Han}/)

输出:["\u8EAB", "\u9AD8"]


正如@Stefan建议的那样,要将irb设置为使用UTF-8编码,请使用irb -E UTF-8启动irb。

要对这一个字符串进行编码,请使用String#encode

'身高455478'.encode('utf-8').scan(/\p{Han}/u)
#=> ["\u8EAB", "\u9AD8"]