正規表現(略してregexp)とは、マッチさせる代替文字列のクラスを表すパターンのことです。Emacsでは、regexpのマッチ箇所を検索するためのインクリメンタルな方法と非インクリメンタルな方法の両方が提供されています。正規表現の構文については、次のセクションで説明します。
インクリメンタルな正規表現検索を開始 (isearch-forward-regexp)。
逆インクリメンタル正規表現検索を開始 (isearch-backward-regexp)。
正規表現のインクリメンタル検索は、C-M-s (isearch-forward-regexp) の入力、プレフィックス引数(値は不問)を指定して C-s を呼び出すか、あるいは前方インクリメンタル検索の中で M-r
を入力することで行えます。このコマンドは C-s
と同様に検索文字列を逐次的に読み込みますが、バッファ内のテキストとの完全一致を探すのではなく、検索文字列を正規表現として扱います。検索文字列にテキストを追加するたびに正規表現が長くなり、その新しい正規表現に対して検索が行われます。正規表現を後方から検索するには、C-M-r (isearch-backward-regexp)、プレフィックス引数を指定した C-r、または後方インクリメンタル検索の中で M-r
を使用してください。
通常のインクリメンタル検索におけるすべての特殊キーシーケンス(インクリメンタル検索用の特殊入力を参照)は、インクリメンタル正規表現検索においても同様の動作をします。例えば、検索開始直後に
C-s
と入力すると、最後に使用したインクリメンタル検索用正規表現が呼び出され、それ以降の範囲からそれが検索されます。インクリメンタル正規表現検索と非正規表現検索では、それぞれ独立したデフォルト設定があります。また、それぞれ個別の検索リングを持っており、M-p および M-n
でアクセスできます。検索リングに保存される検索用正規表現の最大数は、regexp-search-ring-max の値によって決まり、デフォルトは 16 です。
通常のインクリメンタル検索とは異なり、インクリメンタル正規表現検索ではデフォルトでlax space
matchingは使用されません。この機能を切り替えるには、M-s SPC (isearch-toggle-lax-whitespace)
を使用してください。これにより、インクリメンタル正規表現検索で SPC
と入力すると、1文字以上の空白文字の任意の並びにマッチするようになります。変数 search-whitespace-regexp は、lax space matching
用の正規表現を指定します。インクリメンタル検索用の特殊入力を参照してください。
また、通常のインクリメンタル検索とは異なり、インクリメンタル正規表現検索では文字フォールディングを使用できません(検索時のLaxマッチングを参照)。(インクリメンタル正規表現検索中に M-s ' で文字フォールディングを切り替えると、検索は正規表現以外の検索となり、入力した検索パターンはリテラル文字列として解釈されます。)
場合によっては、インクリメンタルな正規表現検索中に正規表現に文字を追加すると、カーソルが戻り、検索が最初からやり直されることがあります。例えば、‘foo’ で検索している状態で ‘\|bar’ を追加すると、最初の ‘bar’ が最初の ‘foo’ より前にある場合に、カーソルが戻ります。(この再計算が行われたことをユーザーに通知するため、プロンプトが “Pending” に変わります。)正規表現の構文を参照してください。
正規表現の順方向検索と逆方向検索は対称ではありません。Emacsにおける正規表現マッチングは常に、正規表現の先頭から順方向に動作するためです。したがって、順方向検索は前方をスキャンし、考えられる各開始位置で順方向のマッチングを試みます。逆方向検索は後方をスキャンし、考えられる各開始位置で順方向のマッチングを試みます。これらの検索手法は鏡像関係にあるわけではありません。
正規表現の非インクリメンタル検索は、re-search-forward および re-search-backward コマンドで行います。これらは M-x で呼び出すことができるほか、C-M-s RET および C-M-r RET によるインクリメンタルな正規表現検索経由でも呼び出せます。これらのコマンドを M-x で呼び出すと、指定した正規表現と完全に一致するものを検索するため、ケースフォールディング以外の
lax-search 機能(検索時の Lax マッチング
を参照)はサポートされません。
インクリメンタル正規表現検索コマンドにプレフィックス引数を指定すると、isearch-forward
や isearch-backward のように通常の文字列検索が行われます。インクリメンタル検索を参照してください。