Я не уверен в точном значении регулярного выражения, которое использует Ruby, но это не просто аберрация Ruby, поскольку .NET работает так же. MSDN says this об этом:
\ ш
Спички любое слово символ. Для версий не-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:
Возможный дубликат [Как использовать регулярное выражение для utf8 в ruby] (http://stackoverflow.com/questions/256822/how-to-use-regex-for-utf8-in-ruby) – marcog
они не являются тот же диалог, ссылка, на которую вы указали, обсуждает, как проверять китайские символы, моя проблема в том, почему \ w соответствует китайским иероглифам UTF-8. – ywenbo