GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Saving-Match-Data.html ・ emacs-doc.conao3.com

35.6.4 試合データの保存と復元

検索を行う可能性のある関数を呼び出す際、以前の検索で得られたマッチデータを後で利用するために保持しておきたい場合は、その呼び出し前後でマッチデータを保存・復元する必要があるかもしれません。以下に、マッチデータの保存を怠った場合に生じる問題を示す例を挙げます。

(re-search-forward "The \\(cat \\)")
     ⇒ 48
(foo)                   ; foo does more searching.
(match-end 0)
     ⇒ 61              ; Unexpected result—not 48!

save-match-data でマッチデータを保存・復元できます:

マクロ: save-match-data body…

このマクロはbodyを実行し、その前後のマッチデータを保存・復元します。戻り値はbody内の最後のフォームの値となります。

set-match-data と match-data を併用することで、特殊形式 save-match-data の効果を再現できます。方法は以下の通りです。

(let ((data (match-data)))
  (unwind-protect
      ...   ; Ok to change the original match data.
    (set-match-data data)))

Emacsは、プロセスフィルタ関数(プロセスフィルタ関数を参照)やプロセスセンチネル(センチネル:プロセス状態の変化の検出を参照)を実行する際、マッチデータを自動的に保存・復元します。