English help on website



[ ] ブラケット(キャラクタクラス)(Ver9.35対応版)
目次コマンド検索系コマンド正規表現− キャラクタクラス
 ファイル名を指定する方法にワイルドカードがありますが、キャラクタクラスはワイルドカードをより賢くしたものです。ブラケット(角括弧)で囲んだ文字のいずれかひとつとマッチすればマッチしたと判断します。さきほどの例で「基本」または「基礎」を検索する場合は次のように指定します。
基[本礎]
 キャラクタクラスには複数の文字が指定できます。
基[本礎地]
 また、「ある文字コードからある文字コードまで」というように範囲指定することも可能です。例えば「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バイト目をキャラクタクラスで表現することはできません。


検索ダイアログでの注意書きについて
検索ダイアログで[^...]を含む文字列を入力すると、右下に改行を含むかどうかの注意書きのメッセージが現れることがあります。
状況によって動作が違いますが、正規表現としては同じで、秀丸エディタから正規表現に渡す元になる文字列が違うためです。

"検索文字列末尾の[^...]は改行も含みます。
「abc[^de]」のように検索文字列の末尾にある場合は、改行も含みます。つまり、「abc改行」といった内容にもマッチします。
秀丸エディタから正規表現に渡す文字列は、行末の改行までのためです。

"検索文字列途中の[^...]は通常改行を含みません。
「abc[^de]fgh」のように検索文字列の途中にある場合は、通常は改行も含みません。つまり、「abc改行fgh」といった内容にマッチしません。
これも、秀丸エディタから正規表現に渡す文字列は、行末の改行までのためです。
コメントによる行数指定(?#maxlines:)や、\nの記述がある場合は、改行を含むようになります。
参照: \nを使った複数行検索の際の制限について