如何在Ruby 1.9中为Unicode西里尔字母指定正则表达式

7
#coding: utf-8
str2 = "asdfМикимаус"
p str2.encoding #<Encoding:UTF-8> 
p str2.scan /\p{Cyrillic}/ #found all cyrillic characters
str2.gsub!(/\w/u,'') #removes only latin characters
puts str2

问题是为什么\w会忽略西里尔字母?
我已经从http://rubyinstaller.org/安装了最新的Ruby包。这是我的ruby -v输出。
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]

据我所知,1.9版的oniguruma正则表达式库已经完全支持Unicode字符。

在Linux(ruby 1.9)中,gsub删除所有字符 - irb(main):006:0> str2.gsub(/ \ w / u,'')=>“” - andrykonchin
@aaz:不应该出现这种情况(请看我的回答);可能是你使用的是旧版本? - Marc-André Lafortune
我会将此问题重命名为“如何在Ruby 1.9中指定Unicode字符的正则表达式”,因为这与win32或(仅限)西里尔字母无关。 - Marc-André Lafortune
1
你说得对。这是Ruby 1.9.1p0的一个bug,在Ruby 1.9.1p376中一切正常。 - andrykonchin
1个回答

11
这是根据Ruby文档规定的:\w等效于[a-zA-Z0-9_],因此不包括任何Unicode字符。
你可能希望使用[[:alnum:]],它包括所有Unicode字母和数字字符。还可以检查[[:word:]][[:alpha:]]

顺便说一句,我们可以感谢 Run Paint Run Run 写下这份文档。 - Marc-André Lafortune

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接