我遇到了一个方法,例如:
@spec split_words(String.t) :: [String.t]
defp split_words(text) do
Regex.scan ~r/(*UTF)[\p{L}0-9-]+/i, text
end
真的能够通过以下测试:
test "German" do
expected = %{"götterfunken" => 1, "schöner" => 1, "freude" => 1}
assert Words.count("Freude schöner Götterfunken") == expected
end
什么是(*UTF)
- 是Elixir特定的还是正则表达式的概念?我猜是将字符串“转换”为UTF编码。那么\p{L}
- 这是一种“扩展器”,让你知道使用包含变音符号的字母表吗?
我在此存储库中看到了它:https://github.com/alxndr/exercism/blob/master/elixir/word-count/word_count.exs#L25
答案 0 :(得分:3)
不,Object.defineProperty()
告诉PCRE正则表达式引擎(可能是Elixir中使用的引擎)将目标字符串作为UTF-8编码字符串读取(否则字符串一次读取一个字节)。但它并没有投射目标字符串。
(*UTF)
是一个unicode字符类,包含所有字母(在所有字母表中,带或不带重音符号)。