2010-08-26 7 views
9

J'utilise Ruby 1.9 et d'essayer de savoir qui regex je dois faire ce vrai:Comment faire correspondre les mots Unicode avec ruby ​​1.9?

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

Vous devez convertir la chaîne au même unicode que vous ne pouvez le faire. Avec Iconv, vous pouvez convertir votre chaîne en unicode spécifique. –

+0

Ajout de l'encodage par défaut. Ça ne marche toujours pas ... – Reactormonk

+0

Essayez de placer un commentaire "# coding utf-8" au début du script et assurez-vous que ce fichier de script est utf-8. – Nakilon

Répondre

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

oh, je t'aime! – Hock

+1

Fou que vous avez besoin de marquer le code source comme UTF8 pour faire l'expression rationnelle se comporter correctement avec le codage correct. Merci beaucoup ! – demental

+2

Une bonne documentation pour cela peut être trouvée ici: http://www.ruby-doc.org/core-1.9.3/Regexp.html#label-Character+Properties –

0

Vous pouvez manually turn on Unicode matching en utilisant l'intérieur (?u) syntaxe:

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

Cependant, en utilisant Unicode Syntaxe propriété (La réponse de steenslag) ou POSIX Brackets Syntax est un meilleur style, car ils respectent automatiquement les codes Unicode:

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

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

Voir this blog post pour plus d'informations sur les caractères Unicode correspondants dans les expressions rationnelles Ruby.

Questions connexes