[] ブラケット(キャラクタクラス)(Ver7.11対応版)
目次−
検索系コマンド−
正規表現−
キャラクタクラス
DOSのファイル名を指定する方法にワイルドカードがありますが、キャラクタクラスはワイルドカードをより賢くしたものです。ブラケット(角括弧)で囲んだ文字のいずれかひとつとマッチすればマッチしたと判断します。さきほどの例で「基本」または「基礎」を検索する場合は次のように指定します。
基[本礎]
キャラクタクラスには複数の文字が指定できます。
基[本礎地]
また、「ある文字コードからある文字コードまで」というように範囲指定することも可能です。例えば「No1」、「No2」、「No3」……というような「No」のあとに数字が現われるパターンを検索したい場合は次のように表現します。
No[0-9]
数字は0から始まることに注意してください。1から0ではありません。文字コードの範囲指定以外で「-」(マイナス)をキャラクタクラスの要素にしたい場合はブラケットの直後か直前に記述します。
また、キャラクタクラスでは「^」(カレット)によって否定をすることができます。さきほどの例では、
基[本礎]
で、「基という文字のあとに、本という文字、または礎という文字」が並んでいる文字列を検索しましたが、否定することにより「基という文字のあとが、本という文字ではなく、かつ礎という文字でもない」文字列を検索することができます。例えば、
基[^本礎]
とすることにより、「基本」や「基礎」にはマッチせず、「基地」にはマッチするようになります。
さきほど、[0-9]で数値(正確には半角0〜半角9までの文字コード)を指定しましたが、範囲指定と否定を組み合わせることにより、その範囲を否定することもできます。
No[0-9][^0-9]
こうすると「No」のあとにひと桁の数字が現われる文字列を検索することができます。ただし、キャラクタクラスでカレットが否定を意味するのは角括弧の直後にカレットがある場合だけです。
[a-z^0-9]
このように表現すると、半角の小文字アルファベットとカレットと半角の数字にマッチします。(大文字/小文字の区別が無効の場合は、大文字アルファベットにもマッチします)
キャラクタクラスの否定は、改行文字にもマッチしてしまうので注意が必要です。
[^A]は、A以外ということで改行文字にもマッチします。
行末の$と組み合わせて [^A]$ と書くと行末の判断がややこしくなるので、 [^A\n]$ と書いたほうがいいです。
キャラクタクラスでは「この文字かこの文字」という条件で検索しますが、「この文字列かこの文字列」という条件で検索したい場合はパターンの論理和 を使います。
なおキャラクタクラスの中にあるメタキャラクタは、メタキャラクタとしての意味はもちません。文字そのものとして扱います。ただし「]」や「¥」をキャラクタクラスの要素にする場合は、¥でエスケープする必要があります。
また、全角文字をコード指定したときに、2バイト目をキャラクタクラスで表現することはできません。