バッファー内のテキストを検索するためのプリミティブ関数が存在します。これらはプログラム内での使用を意図したものですがインタラクティブに呼び出すこともできます。これらをインタラクティブに呼び出すと検索文字列の入力を求めて、引数limitとnoerrorはnil
、repeatは1になります。インタラクティブ検索に関するより詳細な情報はSearching and Replacement in The GNU Emacs Manualを参照してください。
以下の検索関数はバッファーがマルチバイトバッファーならマルチバイト、ユニバイトバッファーならユニバイトに検索文字列を変換します。テキストの表現方法を参照してください。
この関数はstringにたいする正確なマッチをポイントから前方に検索する。成功したら見つかったマッチの終端にポイントをセットしてポイントの新たな値をリターンする。マッチが見つからない場合の値と副作用はnoerror (以下参照)に依存する。
以下の例ではポイントは最初は行の先頭にある。その後の(search-forward
"fox")
によってポイントは‘fox’の最後の文字の後に移動する:
---------- Buffer: foo ---------- ∗The quick brown fox jumped over the lazy dog. ---------- Buffer: foo ----------
(search-forward "fox") ⇒ 20 ---------- Buffer: foo ---------- The quick brown fox∗ jumped over the lazy dog. ---------- Buffer: foo ----------
引数limitは検索の境界を指定するもので、それはカレントバッファー内の位置であること。その位置を超えるようなマッチは受け入れられない。limitが省略またはnil
の場合のデフォルトは、そのバッファーのアクセス可能範囲の終端。
検索失敗時に何が起こるかはnoerrorの値に依存する。noerrorがnil
ならsearch-failed
はエラーをシグナルする。noerrorがt
ならsearch-forward
はnil
をリターンして何も行わない。noerrorがnil
とt
いずれでもなければ、search-forward
はポイントを境界上限に移動してnil
をリターンする。
引数noerrorはマッチに失敗した有効な検索だけに影響する。無効な引数はnoerrorとは無関係にエラーとなる。
countが正の数nなら、それは繰り返し回数の役目をもつ。検索はn回繰り返され、前回のマッチの終端から毎回検索が開始される。これらの連続する検索が成功した場合、関数は成功となりポイントを移動して新たな値をリターンする。それ以外は検索失敗となり、上述したように結果はnoerrorの値に依存する。countが負の数 −nなら、それは逆方向(後方)への検索の繰り返し回数nとしての役目をもつ。
この関数はポイントから後方にstringを検索する。これはsearch-forward
と似ているが、前方ではなく後方に検索する点が異なる。後方への検索ではポイントはマッチの先頭に残される。
この関数はポイントから前方にstringにたいする単語(word)のマッチを検索する。マッチが見つかったら見つかったマッチの終端にポイントをセットしてポイントの新たな値をリターンする。
単語マッチはstringを単語のシーケンスとみなし、それらを分割する句読点は無視する。これはバッファーから同じ単語シーケンスを検索する。単語はそれぞれバッファー内で明確に区別されていなければならない(単語‘ball’の検索は単語‘balls’にマッチしない)が、句読点やスペース等の細部は無視される(‘ball boy’を検索すると‘ball. Boy!’にマッチする)。
以下の例ではポイントは最初バッファー先頭にある。検索によりポイントは‘y’と‘!’の間に残される。
---------- Buffer: foo ---------- ∗He said "Please! Find the ball boy!" ---------- Buffer: foo ----------
(word-search-forward "Please find the ball, boy.") ⇒ 39 ---------- Buffer: foo ---------- He said "Please! Find the ball boy∗!" ---------- Buffer: foo ----------
limitが非nil
なら、それはカレントバッファー内の位置であること。これはその検索の境界上限を指定する。見つかったマッチはその位置を超えてはならない。
noerrorがnil
ならword-search-forward
はエラーをシグナルする。noerrorがt
なら、エラーをシグナルするかわりにnil
をリターンする。noerrorがnil
とt
いずれでもなければ、ポイントをlimit(またはバッファーのアクセス可能範囲の終端)に移動してnil
をリターンする。
countが正の数なら、それは連続して検索する回数を指定する。ポイントは最後のマッチの終端に配置される。countが負の数なら、逆方向に検索してポイントは最後のマッチの先頭に配置される。
word-search-forward
および関連する関数は、stringから句読点を無視した正規表現に変換するために、内部的には関数word-search-regexp
を使用する。
このコマンドはword-search-forward
と同じだが、stringが空白で開始か終了していなければ、stringの先頭か終端が単語境界にマッチする必要がない点が異なる。たとえば‘ball
boy’の検索は‘ball boyee’にはマッチするが、‘balls boy’にはマッチしない。
この関数はポイントから後方へstringにマッチする単語を検索する。この関数はword-search-forward
と同様だが、後方に検索して通常はマッチの先頭にポイントを残す点が異なる。
このコマンドはword-search-backward
と同じだが、文字列が空白で開始か終了していなければ、stringの先頭か終端が単語境界にマッチする必要がない点が異なる。