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を使います。

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

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

通常のインクリメンタル検索とは異なり、インクリメンタルなregexp検索ではcharacter folding(Lax Searchを参照してください)を使用できません(インクリメンタルregexp検索の途中で、M-s 'によりcharacter foldingを切り替えた場合、検索は非regexp検索となり、タイプした検索パターンはリテラル文字列として解釈されます)。

インクリメンタル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で呼び出します。M-xを使用してこれらのコマンドを呼び出した場合は、指定したregexpを厳密に検索するので、case foldingを除くlax-search機能(Lax Searchを参照してください)はサポートされません

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