文字クラス

文字クラス は、大括弧内のいくつかの文字として書き込まれます。次のようになります。
[0123456789]
これは、大括弧内の任意の 1 文字を表す正規表現です。この文字クラスは、任意の 1 桁の数字を表します。
[0123456789][0123456789][0123456789]
は、行内の任意の 3 桁の数字を表します。
数字の文字クラスの場合は、次のようにもっと簡単に書くことができます。
[0-9]
- は、両端の文字の間のすべての文字を表します。したがって、
[a-z]
は、a から z の間 のすべての文字を表します。また、
[a-zA-Z]
は、a から z および A から Z のそれぞれの範囲内のすべての文字を表します。
注: - は、文字クラスの先頭または終わりに現れる場合は、範囲指標とし ては扱われません
[ の直後の文字が曲折アクセント記号 (^) の場合は、 その文字クラスは、大括弧にリストされて いない すべての文字を表します。たとえば、次のようになります。
[^0-9]
は、数字 以外 のすべての文字を表します。同様に、
[^a-zA-Z0-9]
は、英数字以外のすべての文字を表します。
. と書かれる特別な文字クラスがあります。これは、改行文字を除く任意の 文字と一致します。 次のパターン、
“p.x”
は、p で始まり x で終わる 3 文字の文字ストリングに一致します。
注: 改行文字は、明示的に ¥n または、ある範囲の 中で指定されない限り、一致しません。特に、. が改行に一致することはありません。
新しい文字クラス記号が POSIX で導入されました。これらは、 文字クラス定義のときにだけ有効な特別のシーケンスとして準備されています。これらのシーケンスは、以下のとおりです。
[.coll.]"		collation of character coll
[=equiv=]		collation of the character class equiv
[:char-class:]	any of the characters from char-class
lex では、これらの定義の POSIX ロケールだけを受け入れます。とくに、複数文字照合記号についてのサポートはありません。たとえば、次の文字クラスを使用することもできますが、
[[.a.]-[.z.]]
 
これは、次の POSIX ロケールと同じことになります。
[a-z]
lex では、下記の POSIX 定義文字クラスを受け入れます。
[:alnum:]  [:cntrl:]  [:lower:]  [:space:]
[:alpha:]  [:digit:]  [:print:]  [:upper:]
[:blank:]  [:graph:]  [:punct:]  [:xdigit:]
新しい表現を使用する方が、移植性に富みます (しかも、より分かりやすい)。