re-search-forward 関数は、文末、すなわち sentence-end
正規表現で定義されたパターンを検索します。パターンが見つかった場合—つまり文末が見つかった場合—、re-search-forward 関数は次の2つの処理を行います:
re-search-forward
関数は、見つかった出現箇所の末尾にポイントを移動させるという副作用をもたらします。
re-search-forward 関数は true を返します。これが if で受信される値となり、検索が成功したことを意味します。
副作用であるポイントの移動は、if関数に探索が正常に完了して返された値が渡される前に完了する。
if 関数が re-search-forward
の呼び出し成功により true の値を受け取ると、if は then 部分、すなわち式 (skip-chars-backward " \t\n")
を評価します。この式は、印字文字が見つかるまで空白、タブ、またはキャリッジリターンを遡り、その文字の直後にポイントを移動させます。ポイントはすでに文末を示すパターンの末尾に移動しているため、この操作により、ポイントは文の最後の印字文字(通常はピリオド)の直後に置かれることになります。
一方、re-search-forward
関数が文末を示すパターンを見つけられなかった場合、この関数は false を返します。すると、この false によって if が第3引数である (goto-char
par-end) を評価し、ポインタを段落の末尾に移動させます。
(また、テキストがフォームまたはそれに準ずる形式であり、ポイントが完全に移動できない場合には、constrain-to-field 関数が機能します。)
正規表現による検索は非常に有用であり、re-search-forwardで示される、検索をif式の判定とするパターンは便利です。このパターンを取り入れたコードを頻繁に目にしたり、記述したりすることになるでしょう。