2016-04-03 19 views
0

私は、次のような方法に出くわした:それは、次の試験合格できるようにするには本当にだなぜこれらの文字はこのElixir正規表現の正規表現に必要ですか?

@spec split_words(String.t) :: [String.t] 
    defp split_words(text) do 
    Regex.scan ~r/(*UTF)[\p{L}0-9-]+/i, text 
    end 

(*UTF)は何

test "German" do 
    expected = %{"götterfunken" => 1, "schöner" => 1, "freude" => 1} 
    assert Words.count("Freude schöner Götterfunken") == expected 
    end 

を - Elixirのは、特定のまたは正規表現の概念ということでしょうか?私は、文字列をUTFエンコーディングに "キャスト"することを推測しています。そして、\p{L}は何ですか?ウムラウト文字を含むアルファベットを使用することを知らせるための、ある種の「エキスパンダー」ですか?

私は、このリポジトリにそれを見た:https://github.com/alxndr/exercism/blob/master/elixir/word-count/word_count.exs#L25

答えて

2

いいえ、(*UTF)はUTF-8でエンコードされた文字列としてターゲット文字列を読み取るためにPCRE正規表現エンジン(エリクサーで使用されるおそらく1)に指示します(それ以外の文字列が読み込まれます一度に1バイト)。しかし、ターゲット文字列をキャストしません。

\p{L}はすべての文字(すべてのアルファベット、アクセント付きまたはなし)を含むユニコード文字クラスです。ここ

以上に関する情報:http://pcre.org/original/pcre.txt

+0

注:regex101.comは言う(* UTF)と(* UTF8)は、未知の動詞ですので、私はすべてではないPCREのフレーバー – Laurel

+0

regex101 doesnのそれは、この正規表現の風味に特有だと思う、となり'tサポート '(* UTF)'と '(* UTF8)'、それだけです。これはPCRE機能です。 –

+1

今日、私は2つのregex101バグを発見しました.... – Laurel

関連する問題