Previous: Character Classes, Up: Pattern Matching
Flex 2.5では、 文字クラスの中に文字クラス式を含めることができます。
文字クラス式は、 形式的には、 ある文字集合を識別する名前を‘[:’と‘:]’で囲んだものです。 Flex 2.5では、 以下の文字クラス式が有効です。
[:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]
文字クラス式[:XXX:]は、
ANSI Cの‘isXXX()’関数がゼロ以外の値を返す文字の集合に対応します。
唯一の例外は[:blank:]で、
isblank
は
(POSIXでは定義されているものの)
ANSI Cでは定義されていないため、
Flexでは、
マクロIS_BLANK
を
#define IS_BLANK(c) ((c) == ' ' || (c) == '\t')
のように定義して、 これが真となる文字の集合 (すなわち、 スペースとタブ) を文字クラス式[:blank:]に対応させています。
文字クラス式を使えば、
[a-zA-Z] [0-9]
を
[[:alpha:]] [[:digit:]]
と書くことができます。
また、 文字クラスの中に複数の文字クラス式を含めることができますので、
[a-zA-Z0-9]
を、
[[:alpha:][:digit:]]
と書くこともできます (もっとも、 この例の場合は、 [[:alnum:]]と書くほうが良いでしょう)。