When you call a function that may 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) ;
foodoes more searching. (match-end 0) ⇒ 61 ; Unexpected result—not 48!
You can save and restore the match data with
This macro executes body, saving and restoring the match data around it. The return value is the value of the last form in body.
You could use
set-match-data together with
imitate the effect of the special form
save-match-data. Here is
(let ((data (match-data))) (unwind-protect … ; Ok to change the original match data. (set-match-data data)))