如何使用ruby 1.9匹配unicode单词?
我正在使用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öö"
您可以使用inside (?u)
语法手动打开Unicode匹配 :
"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字符的更多信息,请参阅此博客文章 。
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