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?
Operators: * , + , ? , | Anchors: ^ , $ Others: . , \ In order to use a literal ^ at the start or a literal $ at the end of a regex, the character must be escaped.
(dot) metacharacter, and can match any single character (letter, digit, whitespace, everything). You may notice that this actually overrides the matching of the period character, so in order to specifically match a period, you need to escape the dot by using a slash \. accordingly.
Colon does not have special meaning in a character class and does not need to be escaped.
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 (
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With