Начиная с версии 2.0, Ruby использует Onigmo , форк Oniguruma, который поддерживает больше функций, реализованных в Perl 5.10.
Если вы сравните документ, который вы связали (Oniguruma) с Onigmo'sdoc вы можете увидеть разницу между \w
описаниями:
\ w символ слова
Not Unicode:
alphanumeric, "_" and multibyte char.
Unicode: General_Category -- (Letter|Mark|Number|Connector_Punctuation)
\ w символ слова
Not Unicode:
alphanumeric and "_".
Unicode: General_Category -- (Letter|Mark|Number|Connector_Punctuation)
It depends on ONIG_OPTION_ASCII_RANGE option that non-ASCII char includes or not.
Как видите, этого больше нет "и многобайтовый символ." это не имеет смысла (по крайней мере, для меня), и это, вероятно, опечатка.Как бы то ни было, это очень неясно.
Модификатор u
переключает классы сокращенных символов с «Не Unicode» (по умолчанию) на «Unicode».Вот почему вы получаете только caf
без него и café
с ним при попытке сопоставить его с использованием класса символов \w
.
С другой стороны, класс символов [[:alpha:]]
, кажется, ужепо умолчанию расширен до символов Юникода, так как он соответствует "café" без модификатора u.Начало объяснения можно найти в документе:
В зависимости от опции ONIG_OPTION_ASCII_RANGE и опции ONIG_OPTION_POSIX_BRACKET_ALL_RANGE, скобки POSIX соответствуют не-ASCII-символам или нет.
Но выможет заставить его работать с помощью модификатора (?a)
.