\ w in Ruby Regulärer Ausdruck stimmt mit chinesischen Zeichen überein

8

Ich benutze den folgenden Code:

%Vor%

es setzt "matched" und überraschte mich, da "中国" zwei chinesische Zeichen ist, keine 0-9, a-z, A-Z und _, aber warum es "matched" ausgibt.

Könnte mir jemand ein paar Hinweise geben?

    
ywenbo 31.12.2010, 13:34
quelle

2 Antworten

10

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:

mikel 31.12.2010, 13:57
quelle
3

Oniguruma , das ist die Regex-Engine in Ruby 1.9+, definiert \w als:

%Vor%

In 1.9+ weiß Ruby, ob die Zeichenfolge Unicode-Zeichen enthält, und wechselt automatisch zur Verwendung des Unicode-Modus für die Mustererkennung.

    
the Tin Man 31.12.2010 23:39
quelle

Tags und Links