などの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&}