Ruby正则表达式中的\ w匹配中文字符

ywe*_*nbo 9 ruby regex

我使用下面的代码:

puts "matched"  if "??" =~ /\w+/
Run Code Online (Sandbox Code Playgroud)

它让"matched"我感到惊讶,因为"中国"是两个汉字,它不是0-9,az,AZ和_中的任何一个,而是输出"匹配"的原因.

有人能给我一些线索吗?

mik*_*kel 11

我不确定Ruby使用的正则表达式的确切风格,但这不仅仅是Ruby异常,因为.net也可以这样工作.MSDN 对此说了这样的话:

\ w
匹配任何单词字符.对于非Unicode和ECMAScript实现,这与[a-zA-Z_0-9]相同.在Unicode类别中,这与[\ p {Ll}\p {Lu}\p {Lt}\p {Lo}\p {Nd}\p {Pc}]相同.

所以它不是的情况下\w必然只是意味着[a-zA-Z_0-9]-它(和其他运营商)对Unicode字符串不同的操作相比,他们对ASCII的人怎么办.

这仍然与它不同.,因为它\w不匹配标点符号(排序 - 请参阅下面的\ p {Lo}列表),空格,换行和各种其他非单词符号.

至于\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}匹配的内容,您可以在Unicode参考列表中看到: