前: Entire Match Data, 上: Match Data
探索を行う可能性がある関数を呼び出す場合、 あとで使うためにそれ以前の探索によるマッチデータを保存したいときには、 当該関数の呼び出しの周りでマッチデータを保存し復元する必要があります。 つぎの例は、マッチデータを保存し損なった場合に生じる問題点を 示しています。
(re-search-forward "The \\(cat \\)")
=> 48
(foo) ; foo
はさらに
; 探索する
(match-end 0)
=> 61 ; 予期しない結果。48でない!
マッチデータの保存と復元はsave-match-data
で行えます。
スペシャルフォームsave-match-data
の効果をまねるために
match-data
とともにset-match-data
を使うこともできます。
つぎのようにします。
(let ((data (match-data)))
(unwind-protect
... ; もとのマッチデータを変更しても大丈夫
(set-match-data data)))
プロセスフィルタ関数(see Filter Functions)や プロセスの番兵(see Sentinels)を実行するときには、 Emacsは自動的にマッチデータを保存し復元します。