2016-05-02 5 views
2

は、(謝罪バイナリについての私の専門用語がオフの場合 - 私はまだエリクシールを使い始めるよ)[:alnum:]を使用した場合文字クラスのString.replaceがドイツのウムラウトをバイナリに変換するのはなぜですか?

Exercism questions for Elixirの一つを解決しながら、私はString.replaceだけでなく、Regex.replaceが明らかにバイナリにドイツ語のウムラウトを変換することに気づきました文字クラス:[:alnum:]文字クラスの私の使用によって、この動作

iex(1)> String.replace("ö", ~r/[[:alnum:]]/, "_") 
<<95, 182>> 
iex(2)> String.replace("ö", ~r/[^[:alnum:]]/, "_") 
<<195, 95>> 
iex(3)> String.replace("ö", ~r/[_]/, " ") 
"ö" 

を引き起こしていますか? (本当に私に迷惑をかけます)

答えて

7

u修飾子をRegexに渡して、[:alnum:]などのパターンがUnicode文字列と一致するようにする必要があります。 h Regexから

iex(1)> String.replace("ö", ~r/[[:alnum:]]/u, "_") 
"_" 
iex(2)> String.replace("ö", ~r/[^[:alnum:]]/u, "_") 
"ö" 

:正規表現を作成する利用可能な

修飾子

改質剤は、次のとおり

  • ユニコード(U) - pおよび変化などUnicodeの特定のパターンを可能にします w、W、s、および友人のような修飾語もユニコードで一致させる必要があります。それは... 有効なUnicode文字列が一致

    に与えられることを期待し

関連する問題