如何使用ruby 1.9匹配unicode单词?

时间:2010-08-26 14:43:24

标签: ruby regex unicode

我正在使用ruby 1.9并试图找出我需要使用哪个正则表达式:

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

3 个答案:

答案 0 :(得分:37)

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

答案 1 :(得分:0)

http://www.ruby-forum.com/topic/208777

http://www.ruby-forum.com/topic/210770

可能有你的线索。

您还可以使用(记录的)\p{L}属性,例如:

$ ruby -ve "p '℉üüü' =~ /\p{L}/"
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
1

答案 2 :(得分:0)

您可以manually turn on Unicode matching使用内部(?u)语法:

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

但是,使用Unicode属性语法(steenslag的答案)或POSIX Brackets语法是更好的样式,因为它们都自动地尊重Unicode代码点:

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

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

有关在Ruby正则表达式中匹配Unicode字符的更多信息,请参阅this blog post