2016-04-03 8 views
0

ich auf eine Methode kam wie:Warum brauchen Sie diese Zeichen in der Regex in dieser Elixir Regex-Übereinstimmung?

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

Es ist wirklich den folgenden Test zu können passieren:

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

Was (*UTF) ist - ist das Elixier spezifisch oder ein regulärer Ausdruck Konzept? Ich schätze, es ist die Zeichenfolge in UTF-Codierung zu "werfen". Und was ist mit \p{L} - ist das ein "Expander" irgendeiner Art, um Sie wissen zu lassen, ein Alphabet zu verwenden, das den Umlaut-Charakter enthält?

Ich sah es in diesem Repository: https://github.com/alxndr/exercism/blob/master/elixir/word-count/word_count.exs#L25

Antwort

2

Nein, (*UTF) erzählt den PCRE Regex-Engine (wahrscheinlich derjenige in Elixir verwendet), um die Zielzeichenfolge als UTF-8 kodierten String zu lesen (sonst wird die Zeichenfolge gelesen ein Byte auf einmal). Die Zielzeichenfolge wird jedoch nicht umgewandelt.

\p{L} ist eine Unicode-Zeichenklasse, die alle Buchstaben enthält (in allen Alphabeten, mit oder ohne Akzente).

mehr Infos hier: http://pcre.org/original/pcre.txt

+0

Hinweis: regex101.com sagt (* UTF) und (* UTF8) unbekannt sind Verben, also würde ich denke, es ist spezifisch für diese regex Geschmack, und nicht alle PCRE Aromen – Laurel

+0

regex101 doesn 't support '(* UTF)' und '(* UTF8)', das ist alles. Es ist eine PCRE-Funktion. –

+1

Nun, heute habe ich 2 regex101 Bugs entdeckt .... – Laurel

Verwandte Themen