Next: , Previous: , Up: Search   [Contents][Index]


15.5 正規表現検索

正規表現(regular expression: regexpと略します)とは、文字列にマッチさせるための代替の文字列クラスを示すパターンです。Emacsはregexpにマッチする検索を、インクリメンタル、非インクリメンタルの両方で提供します。正規表現の構文は、次のセクションで説明します。

C-M-s

インクリメンタルなregexp検索を開始します(isearch-forward-regexp)。

C-M-r

逆方向のインクリメンタルなregexp検索を開始します(isearch-backward-regexp)。

regexpにたいするインクリメンタル検索は、C-M-s (isearch-forward-regexpをタイプするか、プレフィクス引数(引数の値は何でもよい)を指定して、C-sを呼び出します。前方へのインクリメンタル検索中は、M-rをタイプします。このコマンドはC-sと同様に、検索文字列をインクリメンタルに読みとりますが、検索文字列に正確に一致するバッファーのテキストを検索するのではなく、検索文字列をregexpとして扱います。検索文字列にテキストを追加する度に、regexpは長くなり、新しいregexpを検索します。後方へのregexp検索には、C-M-r(isearch-backward-regexp)またはプレフィクス引数を指定したC-rを使います。後方へのインクリメンタル検索中はM-rを使います。

通常のインクリメンタル検索の特別なキーシーケンスは、インクリメンタルなregexp検索でも同じようなことを行います。たとえば検索開始直後にC-sをタイプすると、最後に行ったインクリメンタル検索で使ったregexpで、前方検索を行います。インクリメンタルなregexpと非regexp検索は、独立したデフォルトを持ちます。これらは別のサーチリングも持っており、これにはM-pM-nでアクセスできます。

通常のインクリメンタル検索とは異なり、インクリメンタルregexp検索は、デフォルトでは緩いスペースマッチング(lax space matching)を使いません。この機能を切り替えるには、M-s SPC (isearch-toggle-lax-whitespace)を使います。そうするとインクリメンタルregexp検索でのSPCは、1つ以上の空白文字の並びにマッチするようになります。変数search-whitespace-regexpは、緩いスペースマッチングにたいするregexpを指定します。Special Isearchを参照してください。

インクリメンタルregexp検索では、検索文字列の追加によりカーソルが前に戻され、最初から検索しなおされることがありえます。たとえば検索文字列‘foo’に‘\|bar’を追加すると、カーソルは‘foo’から、それより前にある最初の‘bar’に戻ります。Regexpsを参照してください。

前方および後方へのregexp検索は、対照的ではありません。なぜならEmacsでのregexpに対するマッチは常に前方へ処理され、regexpの先頭から開始されるからです。したがって前方へのregexp検索は前方にスキャンし、可能性のある開始位置から前方へとマッチを試みます。後方へのregexp検索は後方へスキャンし、可能性のある開始位置から前方へとマッチを試みます。これらの検索手法はミラーイメージではありません。

regexpにたいする非インクリメンタルな検索は、コマンドre-search-forwardおよびre-search-backwardで行われます。これらのコマンドはM-xから呼び出すか、インクリメンタルregexp検索からのC-M-s RETおよびC-M-r RETで呼び出します。

プレフィクス引数を指定したインクリメンタルregexp検索は、isearch-forwardisearch-backwardのような、通常の文字列を検索します。Incremental Searchを参照してください。