Go to the first, previous, next, last section, table of contents.

照合の際の大文字小文字の区別

普通、正規表現では、通常の文字(たとえばメタキャラクタではない文字)の照合の場合も、文字セット内でも大文字小文字が区別されます。したがって、`w'は正規表現では、小文字の`w'にのみマッチし、大文字の`W'にはマッチしません。

大文字小文字に関係なくマッチさせる最も簡単な方法は、文字セットを使うことです(`[Ww]')。しかし、この方法では頻繁に使う必要がある場合は面倒です。また、このような正規表現は読むのが難しくなります。もっと適切な方法が2つあります。

プログラムの中の特定の場所で大文字小文字の区別をしない照合を行う方法の1つは、組み込み文字列関数(まだ説明していません。see section 文字列操作のための組み込み関数)tolowertoupperを使って、データをすべて大文字かすべて小文字か、どちらかに変換することです。たとえば、

tolower($1) ~ /foo/  { ... }

これは最初のフィールドを、照合を行う前に小文字に変換します。

もう1つの方法は、変数IGNORECASEを0以外の値に設定することです(see section 組み込み変数)。IGNORECASEが0でない場合、すべての正規表現の演算は大文字小文字を区別しません。IGNORECASEの値を動的に変化させることにより、実行中にプログラムの大文字小文字の区別を制御できます。IGNORECASEは0に初期化されるので(多くの変数のように)、デフォルトでは大文字小文字が区別されます。

x = "aB"
if (x ~ /ab/) ...   # この検査は失敗します

IGNORECASE = 1
if (x ~ /ab/) ...   # これは成功します

通常、IGNORECASEを使って、ルール別に大文字小文字の区別の有無を設定することはできません。特定のルールのパターンに対してIGNORECASEを設定する方法がないからです。これを行うには、文字セットかtolowerを使わなければなりません。IGNORECASEで行えるのは、すべてのルールに対して、大文 字小文字の区別の有効無効を動的に切り替えることだけです。

IGNORECASE は コマンドライン と BEGINルール内の どちらでも設定できます。 コマンドラインで
IGNORECASEを設定すれば、プログラムを編集せずに大文字小文字の区別を無効にできます。

gawkが互換モードの場合は、IGNORECASEの値は無効です(see section awkの起動)。互換モードでは、大文字小文字が必ず区別されます。


Go to the first, previous, next, last section, table of contents.