2012-11-22 13 views
6

私はñíóúüのようなUTF-8のアルファ文字を照合するためにルビの正規表現を構築しようとしています。/\p{Alpha}/iの作品と/\p{L}/iの違いは何ですか?ルビーの/ p {Alpha}/iと/ p {L}/iの違いは何ですか?

+0

これは奇妙です。 [この比較](http://www.regular-expressions.info/refflavors.html)によると、前者はRubyで利用できないはずです。 –

+0

私は自分のレールコンソールで両方を使用しているので、古いものでなければなりません。 –

+0

古くなったようです。 RubyはIIRCの1.9で新しいRegexエンジンを使用し始めました。 – Chowlett

答えて

9

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

バージョン1.9からRubyが\p{Alpha}をサポートしているようです。 POSIXでは\p{Alpha}\p{L&}(Unicodeをサポートする正規表現の場合はsee here)に等しい。これは、大文字と小文字のバリアント(see here)を持つすべての文字に一致します。彼らは\p{L}で試合になるだろうがUnicase文字は(一致しないでしょう

これはRuby用の真実であるとは思えません(アラビア語がunicaseアルファベットを持っているので、私は、ランダムなアラビア語の文字を選んだ):。

\p{Alpha}がRubyの\p{L}のエイリアスに過ぎないことを示す非常に良いと思われます。 Rubularでは、\p{Alpha}がRuby 1.8.7で利用できなかったことも分かります。

修飾子は、いずれの場合も大文字と小文字の両方に一致するため、\p{Alpha}\p{L}の両方が一致しないことに注意してください。

EDIT:

ヘクタール、違いがあります! Rubyの新しい正規表現エンジン(上記のRuby 1.9で使用中)に関するthis PDFが見つかりました。 \p{Alpha}は、エンコーディングに関係なく使用できます(Unicodeをサポートしていない場合は[A-Za-z])。\p{L}は特にUnicodeプロパティです。つまり、\p{Alpha}はPOSIX正規表現とまったく同じように動作しますが、ここでは\p{L}に対応しますが、POSIXでは\p{L&}に対応します。

+0

ありがとうございます。私はあなたが 'i'修飾子について指摘したことを理解しています。 –

+0

@BishmaStornelli私はまったく正しいとは思わなかったようです。私の編集を参照してください;) –

+0

もう一度ありがとうございます。いい答え。 –

関連する問題