Previous: Entire Match Data, Up: Match Data [Contents][Index]
When you call a function that may do a search, you may need to save and restore the match data around that call, if you want to preserve the match data from an earlier search for later use. Here is an example that shows the problem that arises if you fail to save the match data:
(re-search-forward "The \\(cat \\)")
⇒ 48
(foo) ; Perhaps foo
does
; more searching.
(match-end 0)
⇒ 61 ; Unexpected result—not 48!
You can save and restore the match data with save-match-data
:
This special form executes body, saving and restoring the match data around it.
You can use set-match-data
together with match-data
to
imitate the effect of the special form save-match-data
. This is
useful for writing code that can run in Emacs 18. Here is how:
(let ((data (match-data)))
(unwind-protect
… ; May change the original match data.
(set-match-data data)))
SXEmacs automatically saves and restores the match data when it runs process filter functions (see Filter Functions) and process sentinels (see Sentinels).