などのUTF-8のアルファ文字に一致するように、ルビーで正規表現を構築しようとしています。動作することも動作することもñíóúü
知っていますが、違いは何ですか?/\p{Alpha}/i
/\p{L}/i
1 に答える
それらは同等のようです。(編集:時々、この回答の最後を参照してください)
\p{Alpha}
Rubyはバージョン1.9から対応しているよう です。In POSIX \p{Alpha}
is equal to \p{L&}
(Unicode をサポートする正規表現については、こちらを参照してください)。これは、大文字と小文字のバリエーションを持つすべての文字に一致します (こちらを参照)。ユニケース文字は一致しません ( \p{L}
.
これは Ruby には当てはまらないようです (アラビア語にはユニケース アルファベットがあるため、ランダムなアラビア語文字を選びました)。
\p{L}
(任意の文字) 一致します。- 大文字と小文字を区別するクラス
\p{Lu}
、\p{Ll}
、\p{Lt}
が一致しません。予想通り。 p{L&}
一致しません。予想通り。\p{Alpha}
一致します。
これは、Ruby\p{Alpha}
の単なるエイリアスであるという非常に良い兆候のようです。Rubularでは、Ruby 1.8.7 では利用できなかった\p{L}
ことがわかります。\p{Alpha}
i
どちらの場合でも修飾子は無関係であることに注意してください。とにかく両方と両方とも大文字と小文字の両方\p{Alpha}
に一致するからです。\p{L}
編集:
あはは、違いがあります!Ruby の新しい正規表現エンジンに関するこの PDFを見つけました(上記のように Ruby 1.9 で使用されています)。エンコーディングに関係なく使用できます ( Unicode がサポートされていない場合\p{Alpha}
はおそらく一致します)。つまり、は POSIX 正規表現とまったく同じように動作しますが、違いはここでは に対応しますが、POSIX では に対応します。[A-Za-z]
\p{L}
\p{Alpha}
\p{L}
\p{L&}