为什么在Elixir正则表达式匹配中的正则表达式中需要这些字符?

时间:2016-04-03 21:23:22

标签: regex elixir

我遇到了一个方法,例如:

  @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

1 个答案:

答案 0 :(得分:3)

不,Object.defineProperty()告诉PCRE正则表达式引擎(可能是Elixir中使用的引擎)将目标字符串作为UTF-8编码字符串读取(否则字符串一次读取一个字节)。但它并没有投射目标字符串。

(*UTF)是一个unicode字符类,包含所有字母(在所有字母表中,带或不带重音符号)。

此处有更多信息:http://pcre.org/original/pcre.txt

相关问题