3.2 文字クラスと角括弧式
角括弧式とは、「[」と「]」で囲んだ文字の一覧です。その一覧にある任意の1文字に一致します。一覧の最初の文字がキャレット「^」の場合は、一覧にない任意の文字に一致します。符号化エラーに一致するかどうかは未規定です。たとえば、正規表現「[0123456789]」は任意の1桁の数字に一致し、「[^()]」は開き丸括弧でも閉じ丸括弧でもない任意の1文字に一致します。後者は符号化エラーに一致する場合も、しない場合もあります。
角括弧式内の範囲式は、ハイフンで区切った2文字で構成します。既定のCロケールでは、ASCII順でその2文字の間にある任意の1文字に、両端を含めて一致します。たとえば、「[a-d]」は「[abcd]」と同じです。ほかのロケールでの動作は未規定です。「[a-d]」は「[abcd]」、「[aBbCcDd]」、または別の角括弧式と同じになるかもしれません。どの文字にも一致しない場合、一致する文字の集合が不規則になる場合、式自体が無効になる場合もあります。角括弧式を従来どおりに解釈するには、環境変数LC_ALLを「C」に設定し、「C」ロケールを使えます。
さらに、角括弧式内には、以下の名前付き文字クラスがあらかじめ定義されています。その解釈はLC_CTYPEロケールに依存します。たとえば、「[[:alnum:]]」は、現在のロケールの数字と字母の文字クラスを表します。
- ‘[:alnum:]’
字母と数字:「[:alpha:]」と「[:digit:]」です。「C」ロケールでASCII符号化を使う場合は、「[0-9A-Za-z]」と同じです。
- ‘[:alpha:]’
字母:「[:lower:]」と「[:upper:]」です。「C」ロケールでASCII符号化を使う場合は、「[A-Za-z]」と同じです。
- ‘[:blank:]’
空白文字:スペースとタブです。
- ‘[:cntrl:]’
制御文字です。ASCIIでは8進コード000〜037と177(DEL)に当たります。ほかの文字集合では、対応する文字があればそれを指します。
- ‘[:digit:]’
数字:
0 1 2 3 4 5 6 7 8 9です。- ‘[:graph:]’
図形文字:「[:alnum:]」と「[:punct:]」です。
- ‘[:lower:]’
小文字の字母です。「C」ロケールでASCII符号化を使う場合は、
a b c d e f g h i j k l m n o p q r s t u v w x y zです。- ‘[:print:]’
表示可能文字:「[:alnum:]」、「[:punct:]」、スペースです。
- ‘[:punct:]’
句読点などの記号文字です。「C」ロケールでASCII符号化を使う場合は、
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~です。- ‘[:space:]’
空白文字です。「C」ロケールでは、タブ、改行、垂直タブ、改ページ、復帰、スペースです。改行との照合については、「使用例」を参照してください。
- ‘[:upper:]’
大文字の字母です。「C」ロケールでASCII符号化を使う場合は、
A B C D E F G H I J K L M N O P Q R S T U V W X Y Zです。- ‘[:xdigit:]’
16進数字:
0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e fです。
これらのクラス名に含まれる角括弧は、記号名の一部です。角括弧式を区切る角括弧に加えて、この角括弧も含める必要があります。
外側の角括弧を誤って省略し、たとえば「[:upper:]」を検索した場合、GNU grepは、正規表現「[:epru]」を検索する意図ではなかったとみなし、診断メッセージを表示して終了状態2で終了します。
特殊文字は、角括弧式の内部では特殊な意味を失います。
- ‘]’
一覧の最初の項目でなければ、角括弧式を終了します。「]」を一覧の項目に含めるには、最初に置く必要があります。
- ‘[.’
照合シンボルの開始を表します。
- ‘.]’
照合シンボルの終了を表します。
- ‘[=’
等価クラスの開始を表します。
- ‘=]’
等価クラスの終了を表します。
- ‘[:’
文字クラスの開始記号を表します。後ろに有効な文字クラス名を指定する必要があります。
- ‘:]’
文字クラスの終了記号を表します。
- ‘-’
一覧の最初や最後、または範囲の終点でなければ、範囲を表します。「-」を一覧の項目に含めるには、最後に置くのが最適です。
- ‘^’
一覧にない文字を表します。「^」を一覧の項目に含めるには、最初以外の位置に置いてください。