I’ve been playing around with emacs lisp, and I wanted to write a little function to do a regular expression search and replace. I had a heck of a time getting the regular expression to work correctly because I didn’t realize that all the special characters need to be double escaped when writing lisp code (but not when using query-replace-regexp interactively!).
So for example, using query-replace-regexp interactively you can use
^\(.*\)[\t]-.*$
but when writing elisp code you need to double escape everything like so:
^\\(.*\\)[\t]-.*$
I finally found a reference to this in a Steve Yegge article, but I was wondering if anyone knew why this is?
It’s because you need to escape backslashes in strings. If you don’t escape the backslash of
\(in the string, it turns out to be just(