8

などのUTF-8のアルファ文字に一致するように、ルビーで正規表現を構築しようとしています。動作することも動作することもñíóúü知っていますが、違いは何ですか?/\p{Alpha}/i/\p{L}/i

4

1 に答える 1

14

それらは同等のようです。(編集:時々、この回答の最後を参照してください)

\p{Alpha}Rubyはバージョン1.9から対応しているよう です。In POSIX \p{Alpha}is equal to \p{L&}(Unicode をサポートする正規表現については、こちらを参照してください)。これは、大文字と小文字のバリエーションを持つすべての文字に一致します (こちらを参照)。ユニケース文字は一致しません ( \p{L}.

これは Ruby には当てはまらないようです (アラビア語にはユニケース アルファベットがあるため、ランダムなアラビア語文字を選びました)。

これは、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&}

于 2012-11-22T17:10:13.177 に答える