這是爲什麼false
:Unicode和:阿爾法:
iex(1)> String.match?("漢語漢語", ~r/^[[:alpha:]]+$/)
false
但這true
:
iex(2)> String.match?("漢語漢語", ~r/[[:alpha:]]/)
true
有時[:alpha:]
是unicode的,有時它不是?
編輯:
我不認爲我的原始示例是足夠清楚。
這是爲什麼false
:
iex(1)> String.match?("漢", ~r/^[[:alpha:]]+$/)
false
但這true
:
iex(2)> String.match?("漢", ~r/[[:alpha:]]/)
true
嘗試使用'/ u'修飾符:'〜r/^ [[:alpha:]] + $/u'。 –
謝謝。我明白'u'修飾符。我也可以完成'\ p {L}'。我的問題是爲什麼'[:alpha:]'在這兩個例子中的工作方式不同? – mwoods79
當您以非Unicode模式將字符串傳遞給正則表達式時,它將被視爲字節數組,而不是Unicode字符串。請參閱'IO.puts byte_size(「漢語漢語」)'和'IO.puts String.length(「漢語漢語」)'區別。字符串中的字節不能與'[:alpha:]'POSIX字符類匹配。因此,第一個表達式不起作用,而第二個表達式因爲它只需要1個字符來返回有效的匹配。 –