grep [0-9]
同じように動作しますかgrep [:digit:]
?
答え1
[0-9]
いいえいいえと同じです[:digit:]
。
[0-9]
0から9までの数字と一致します。
[:digit:]
0 ~ 9 と非西欧言語(東アラビア語など)の数字と一致します。
答え2
[[:digit:]]
内部の説明を変更できます[0-9]
。これは入力エンコーディングによって異なります。 ASCIIなら問題ないようです。他のエンコーディングでは、数字が連続していないか、バイト範囲が異なる場合があります。他の書き込みシステムでは、特殊数字が欠落している可能性があります。[:digit:]
[…]
答え3
正確に言うと、次の場合[0-9]
にのみ同じであることが保証されます[:digit:]
。
正規表現パーサーはこれをサポートします
[:digit:]
(つまり、そうでない場合、既存のパーサーは[:digit:]
おそらくあなたが思うように実行しません)。そして:入力文字セットはASCIIと同じ文字セットで、数字だけが文字で
0
互いに9
隣接しています。 (たとえば)Unicode(数字に数字0
以外の文字を含めることができる場合9
)または他の8ビット文字セットでも隣接しない可能性があります0
(9
EBCDIC数字0
-9
隣接)。
Unicode 例外を示す例ここ。ご覧のとおり、「数字、数字、小数」カテゴリのUnicode文字セットには、[0-9]
10個のASCII数字と一致する以上のものが含まれています。これには、アラビア語、インド人、拡張アラビア語、NGOなどが含まれます。
Unicode 番号の詳細については、次をご覧ください。ここ。
答え4
'[:数値:]'はい理論的にクラスター番号を一緒に設定するためにローカル文字セットに依存しないという利点があり、移植性に優れています。
関連例:「[:upper:]」と「[AZ]」の間にASCIIの違いはありませんが、はい既存のIBMとの違いEBCDICここで、「[AZ]」は26文字(EBCDICコード193-233)ではなく41文字に拡張されるため、EBCDIC "}\"などと一致します。