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
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
# encoding=utf-8
p "föö".match(/\p{Word}+/)[0] == "föö"
oh, je t'aime! – Hock
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
Une bonne documentation pour cela peut être trouvée ici: http://www.ruby-doc.org/core-1.9.3/Regexp.html#label-Character+Properties –
http://www.ruby-forum.com/topic/208777
et
http://www.ruby-forum.com/topic/210770
pourrait avoir des indices pour vous.
Vous pouvez également utiliser le (documenté) \p{L}
propriété, ex:
$ ruby -ve "p '℉üüü' =~ /\p{L}/"
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
1
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.
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. –
Ajout de l'encodage par défaut. Ça ne marche toujours pas ... – Reactormonk
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