2010-04-27 10 views
7
#coding: utf-8 
str2 = "asdfМикимаус" 
p str2.encoding #<Encoding:UTF-8> 
p str2.scan /\p{Cyrillic}/ #found all cyrillic characters 
str2.gsub!(/\w/u,'') #removes only latin characters 
puts str2 

La domanda è perché \w ignorare i caratteri cirillici?Come specificare Regexp per caratteri cirillici unicode in Ruby 1.9

Ho installato l'ultimo pacchetto di rubini da http://rubyinstaller.org/. Qui è la mia uscita di ruby -v

ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32] 

Per quanto ne so 1,9 oniguruma libreria di espressione regolare ha il pieno supporto per i caratteri Unicode.

+0

su Linux (ruby 1.9) gsub rimuove tutti i caratteri - irb (principale): 006: 0> str2.gsub (/ \ w/u, '') => "" – andrykonchin

+0

@aaz: non dovrebbe (vedere la mia risposta); probabilmente hai una vecchia versione? –

+0

Vorrei rinominare questa domanda come "Come specificare Regexp per caratteri unicode in Ruby 1.9", poiché questo non è correlato a win32 né a (solo) cirillico. –

risposta

10

Questo è come specificato nello Ruby documentation: \w equivale a [a-zA-Z0-9_] e pertanto non ha come target alcun carattere Unicode.

Probabilmente si desidera utilizzare [[:alnum:]], che include tutti i caratteri alfabetici e numerici unicode. Controlla anche [[:word:]] e [[:alpha:]].

+0

BTW, possiamo ringraziare Run Paint Run Run per scrivere questa documentazione. –