为什么以下代码返回nil:
'The name of the city is: Ørbæk'.match(/:\s\w+/)
#=> nil
当我希望它返回"Ørbæk"
我尝试在文档的开头设置#encoding=utf-8
,但它不会改变任何内容。
PS。 Ø和Æ是丹麦字母
答案 0 :(得分:7)
元字符\w
等同于字符类[a-zA-Z0-9_]
;仅匹配字母,数字和_
。
而是使用字符属性\p{Word}
:
'The name of the city is: Ørbæk'.match(/:\s\p{Word}+/)
# => #<MatchData ": Ørbæk">
根据Character Properties from Ruby Regexp documentation:
/\p{Word}/
- 以下Unicode常规类别之一的成员Letter,Mark,Number,Connector_Punctuation
答案 1 :(得分:2)
您可以改为使用\ p {Word}:
irb(main):001:0> 'The name of the city is: Ørbæk'.match(/:\s\p{Word}+/)
=> #<MatchData ": Ørbæk">
答案 2 :(得分:1)
如果您要匹配的单词只包含字母字符,请使用\p{L}
:
match(/:\s\p{L}+/)