2010-08-26 8 views
9

estoy usando Ruby 1.9 y tratando de averiguar qué expresiones regulares Necesito hacer esto cierto:¿Cómo hacer coincidir palabras unicode con ruby ​​1.9?

Encoding.default_internal = Encoding.default_external = 'utf-8' 
"föö".match(/(\w+)/u)[1] == "föö" 
# => false 
+0

Tiene que convertir ambas cadenas en el mismo Unicode que puede igualarlo. Con Iconv puedes convertir tu cadena a unicode específico. –

+0

Codificación predeterminada agregada. Todavía no funciona ... – Reactormonk

+0

Intenta colocar el comentario "# coding utf-8" al comienzo de la secuencia de comandos y asegúrate de que ese archivo de script sea utf-8. – Nakilon

Respuesta

36
# encoding=utf-8 
p "föö".match(/\p{Word}+/)[0] == "föö" 
+2

¡oh, te amo! – Hock

+1

Loco que necesita etiquetar el código fuente como UTF8 para hacer que la expresión regular se comporte correctamente con la codificación correcta. Muchas gracias ! – demental

+2

Una buena documentación para eso se puede encontrar aquí: http://www.ruby-doc.org/core-1.9.3/Regexp.html#label-Character+Properties –

0

Puede manually turn on Unicode matching usando el interior (?u) sintaxis:

"föö".match(/(?u)(\w+)/)[1] == "föö" 
# => true 

Sin embargo, el uso de Unicode propiedad Sintaxis (respuesta de steenslag) o la sintaxis POSIX Brackets es mejor estilo, ya que ambos respetan automáticamente los puntos de código Unicode:

"föö".match(/(\p{word}+)/)[1] == "föö" 
# => true 

"föö".match(/([[:word:]]+)/)[1] == "föö" 
# => true 

Consulte this blog post para obtener más información sobre la coincidencia de los caracteres Unicode en las expresiones regulares de Ruby.

Cuestiones relacionadas