我使用下面的代码:
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参考列表中看到: