Next: , Up: Searching and Matching   [Contents][Index]


33.1 文字列の検索

バッファー内のテキストを検索するためのプリミティブ関数が存在します。これらはプログラム内での使用を意図したものですがインタラクティブに呼び出すこともできます。これらをインタラクティブに呼び出すと検索文字列の入力を求めて、引数limitnoerrornilrepeatは1になります。インタラクティブ検索に関するより詳細な情報はSearching and Replacement in The GNU Emacs Manualを参照してください。

以下の検索関数はバッファーがマルチバイトバッファーならマルチバイト、ユニバイトバッファーならユニバイトに検索文字列を変換します。Text Representationsを参照してください。

Command: search-forward string &optional limit noerror count

この関数は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の値に依存する。noerrornilならsearch-failedはエラーをシグナルする。noerrortならsearch-forwardnilをリターンして何も行わない。noerrorniltいずれでもなければ、search-forwardはポイントを境界上限に移動してnilをリターンする。

引数noerrorはマッチに失敗した有効な検索だけに影響する。無効な引数はnoerrorとは無関係にエラーとなる。

repeatが正の数nなら検索はn回繰り返される。一連の検索は前回のマッチの終端から毎回検索が開始される。これらの一連の検索が成功すると、関数呼び出しは成功となりポイントを移動して新たな値をリターンする。それ以外は関数の呼び出しは失敗となり、結果は上述のようにnoerrorの値に依存する。repeatが負の数-nなら検索は逆方向(後方)へn回行われる。

Command: search-backward string &optional limit noerror count

この関数はポイントから後方にstringを検索する。これはsearch-forwardと似ているが、前方ではなく後方に検索する点が異なる。後方への検索ではポイントはマッチの先頭に残される。

Command: word-search-forward string &optional limit noerror count

この関数はポイントから前方に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なら、それはカレントバッファー内の位置であること。これはその検索の境界上限を指定する。見つかったマッチはその位置を超えてはならない。

noerrornilならword-search-forwardはエラーをシグナルする。noerrortなら、エラーをシグナルするかわりにnilをリターンする。noerrorniltいずれでもなければ、ポイントをlimit(またはバッファーのアクセス可能範囲の終端)に移動してnilをリターンする。

countが正の数なら、それは連続して検索する回数を指定する。ポイントは最後のマッチの終端に配置される。countが負の数なら、逆方向に検索してポイントは最後のマッチの先頭に配置される。

word-search-forwardおよび関連する関数は、stringから句読点を無視した正規表現に変換するために、内部的には関数word-search-regexpを使用する。

Command: word-search-forward-lax string &optional limit noerror count

このコマンドはword-search-forwardと同じだが、stringが空白で開始か終了していなければ、stringの先頭か終端が単語境界にマッチする必要がない点が異なる。たとえば‘ball boy’の検索は‘ball boyee’にはマッチするが、‘balls boy’にはマッチしない。

Command: word-search-backward string &optional limit noerror count

この関数はポイントから後方へstringにマッチする単語を検索する。この関数はword-search-forwardと同様だが、後方に検索して通常はマッチの先頭にポイントを残す点が異なる。

Command: word-search-backward-lax string &optional limit noerror count

このコマンドはword-search-backwardと同じだが、文字列が空白で開始か終了していなければ、stringの先頭か終端が単語境界にマッチする必要がない点が異なる。