这有效:"ы д" |> IO.puts
但这不是:"ы д" |> String.split(~r/[^а-я]+/) |> hd |> IO.puts
** (ArgumentError) argument error
(stdlib) :io.put_chars(#PID<0.26.0>, :unicode, [<<209>>, 10])
为什么?
答案 0 :(得分:3)
Elixir中的正则表达式默认不是基于Unicode的代码点。您需要传递u
modifier以启用Unicode代码点上的匹配:
iex(1)> "ы д" |> String.split(~r/[^а-я]+/u)
["ы", "д"]
iex(2)> "ы д" |> String.split(~r/[^а-я]+/u) |> hd
"ы"
如果没有u
,则返回值不是UTF-8:
iex(1)> "ы д" |> String.split(~r/[^а-я]+/)
[<<209>>, "д"]