爲什麼下面的代碼返回零:正則表達式不匹配的話UTF8字符( w +)
'The name of the city is: Ørbæk'.match(/:\s\w+/)
#=> nil
當我希望它返回"Ørbæk"
我已經嘗試設置在該#encoding=utf-8
文檔的開頭,但它不會改變任何東西。
PS。 Ø和Æ是丹麥語字母
爲什麼下面的代碼返回零:正則表達式不匹配的話UTF8字符( w +)
'The name of the city is: Ørbæk'.match(/:\s\w+/)
#=> nil
當我希望它返回"Ørbæk"
我已經嘗試設置在該#encoding=utf-8
文檔的開頭,但它不會改變任何東西。
PS。 Ø和Æ是丹麥語字母
元字符\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通用類書之一的成員,標記,號碼,CONNECTOR_PUNCTUATION
您可以使用\ p {字}代替:
irb(main):001:0> 'The name of the city is: Ørbæk'.match(/:\s\p{Word}+/)
=> #<MatchData ": Ørbæk">
如果你想匹配的單詞只包含字母字符,然後使用\p{L}
:
match(/:\s\p{L}+/)