replace-string replaces exact matches for a single string. The
replace-regexp replaces any match for a specified
replace-regexp, the newstring need not be constant. It
can refer to all or part of what is matched by the regexp. ‘\&’
in newstring stands for the entire text being replaced.
‘\d’ in newstring, where d is a digit, stands for
whatever matched the d’th parenthesized grouping in regexp.
M-x replace-regexp RET c[ad]+r RET \&-safe RET
would replace (for example) ‘cadr’ with ‘cadr-safe’ and ‘cddr’ with ‘cddr-safe’.
M-x replace-regexp RET \(c[ad]+r\)-safe RET \1 RET
would perform exactly the opposite replacements. To include a ‘\’ in the text to replace with, you must give ‘\\’.