Next: , Previous: Searching and Matching, Up: Searching and Matching


33.1 文字列の探索

これらは、バッファ内のテキストを探索するための基本関数です。 これらはプログラムで使うことを意図していますが、 対話的に呼び出すこともできます。 その場合、探索文字列を問い合わせてきますが、 limitnoerrornilに、repeatは1に設定されます。

これらの探索関数は、バッファがマルチバイトであると 探索文字列をマルチバイトに変換します。 バッファがユニバイトであると探索文字列をユニバイトに変換します。 See Text Representations

— コマンド: search-forward string &optional limit noerror repeat

この関数は、ポイントから前方へ向けて文字列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を返しなにもしない。 noerrornilでもtでもないと、 search-forwardはポイントを上限位置へ移動してnilを返す。 (この場合にもポイントの新たな値を返すほうが一貫性があるが、 値nilに依存しているプログラムがある。)

repeatを指定してあると(正の数であること)、 その回数だけ探索を繰り返す(一致箇所の末尾を新たな探索の開始位置とする)。 連続してこれらの探索に成功すると関数は成功し、 ポイントを移動してその新たな値を返す。 さもなければ探索は失敗である。

— コマンド: search-backward string &optional limit noerror repeat

この関数は、ポイントから後方へ向けてstringを探索する。 search-forwardと同様であるが、後方へ向けて探索し 一致箇所の先頭にポイントを置く点が異なる。

— コマンド: word-search-forward string &optional limit noerror repeat

この関数は、ポイントから前方へ向けてstringに一致する『単語』を探索する。 一致をみつけると、一致箇所の末尾にポイントを設定し ポイントの新たな値を返す。

単語の一致では、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.")
                35
          
          ---------- Buffer: foo ----------
          He said "Please!  Find
          the ball boy-!-!"
          ---------- Buffer: foo ----------

limitnil以外(カレントバッファ内の位置)であると、 それは探索の上限を指定する。 みつかった一致箇所はその位置を越えてはならない。

noerrornilであると、 探索に失敗するとエラーword-search-failedを通知する。 noerrortであると、 エラーを通知するかわりにnilを返す。 noerrornilでもtでもないと、 ポイントをlimit(あるいはバッファの末尾)へ移動してnilを返す。

repeatnil以外であると、 その回数だけ探索を繰り返す。 ポイントは最後の一致箇所の末尾へ置かれる。

— コマンド: word-search-backward string &optional limit noerror repeat

この関数はポイントから後方へ向けてstringに一致する単語を探索する。 この関数はword-search-forwardと同様であるが、 後方へ向けて探索し一致箇所の先頭にポイントを置く点が異なる。