Ich bin mir nicht sicher über den genauen Geschmack von Regex, den Ruby verwendet, aber das ist nicht nur eine Ruby-Abweichung, da .net auch so funktioniert. MSDN sagt dazu :
\ w
Stimmt mit jedem Wort überein. Zum Nicht-Unicode und ECMAScript Implementierungen, das ist das gleiche wie [a-zA-Z_0-9]. In Unicode-Kategorien das ist das gleiche wie [\ p {Ll} \ p {Lu} \ p {Lt} \ p {Lo} \ p {Nd} \ p {Pc}].
Es ist also nicht so, dass \w
notwendigerweise nur [a-zA-Z_0-9]
bedeutet - es (und andere Operatoren) arbeiten anders bei Unicode-Strings als bei Ascii-Strings.
Dies unterscheidet sich jedoch immer noch von .
, da \w
keine Interpunktionszeichen (Art - siehe unten die \ p {Lo} -Liste), Leerzeichen, neue Zeilen und verschiedene andere Nicht-Wörter enthält Symbole.
Was genau \p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}
entspricht, können Sie in einer Unicode-Referenzliste sehen:
Oniguruma , das ist die Regex-Engine in Ruby 1.9+, definiert \w
als:
In 1.9+ weiß Ruby, ob die Zeichenfolge Unicode-Zeichen enthält, und wechselt automatisch zur Verwendung des Unicode-Modus für die Mustererkennung.