はなぜこのfalse
です:Unicodeと:アルファ:
iex(1)> String.match?("汉语漢語", ~r/^[[:alpha:]]+$/)
false
しかし、これはtrue
です:?
iex(2)> String.match?("汉语漢語", ~r/[[:alpha:]]/)
true
時々[:alpha:]
はユニコードで、時にはそうではありませんか?
編集:
私の元の例では十分とは言えません。
なぜこのfalse
です:
iex(1)> String.match?("汉", ~r/^[[:alpha:]]+$/)
false
しかし、これはtrue
です:?
iex(2)> String.match?("汉", ~r/[[:alpha:]]/)
true
'/ u'修飾子を使って試してください:'〜r/^ [[alpha:]] + $/u'。 –
ありがとうございます。私は 'u'修飾子を理解しています。私は '\ p {L}'もやっていました。私の質問は、なぜこれらの2つの例で '[:alpha:]'の動作が異なっているのでしょうか? – mwoods79
文字列を非Unicodeモードで正規表現に渡すと、Unicode文字列ではなくバイト配列として扱われます。 'IO.puts byte_size("汉语漢語 ")'と 'IO.puts String.length("汉语漢語 ")'の違いを参照してください。 '[:alpha:]' POSIX文字クラスとマッチできない文字列にバイトがあります。したがって、最初の式は機能しませんが、2番目の式は有効な一致を返すためには1文字しか必要としません。 –