2010-04-27 11 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 cuestión es por qué \w ignoran los caracteres cirílicos?Cómo especificar Regexp de caracteres Unicode cirílico en Ruby 1.9

He instalado el último paquete de ruby ​​de http://rubyinstaller.org/. Aquí está mi salida del ruby -v

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

Por lo que yo sé 1,9 oniguruma biblioteca de expresiones regulares tiene soporte completo para caracteres Unicode.

+0

en Linux (ruby 1.9) gsub eliminar todos los caracteres - irb (main): 006: 0> str2.gsub (/ \ w/u, '') => " – andrykonchin

+0

@aaz: no debería (ver mi respuesta); ¿Probablemente tienes una versión anterior? –

+0

Cambiaría el nombre de esta pregunta a "Cómo especificar Regexp para caracteres Unicode en Ruby 1.9", ya que esto no está relacionado con win32 ni con (solo) cirílico. –

Respuesta

10

Esto es como se especifica en el Ruby documentation: \w es equivalente a [a-zA-Z0-9_] y por lo tanto no se dirige a ningún carácter Unicode.

En su lugar, probablemente desee utilizar [[:alnum:]], que incluye todos los caracteres alfabéticos y numéricos de unicode. Verifique también [[:word:]] y [[:alpha:]].

+0

BTW, podemos agradecer a Run Paint Run Run por escribir esta documentación. –

Cuestiones relacionadas