Emacs - regular expressions in Lisp need to be double-escaped - why?

前端 未结 4 1751
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-09 15:44

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

相关标签:
4条回答
  • 2020-12-09 16:19

    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 (

    0 讨论(0)
  • 2020-12-09 16:33

    scottfrazier is correct, one escape is parsed when the string is read, another is parsed when creating the regular expression. It's fairly easy to remember, but it can become a pain, especially when you're trying to match a literal backslash '\'. You end up having to do it four times '\\\\' because you have to double-slash to match the slash in both the initial string parse and the regular expression parse.

    And when you write on Stack Overflow about this problem you have to use 8 slashes because markdown uses the slash for an escape character as well.

    0 讨论(0)
  • 2020-12-09 16:41

    You already have the answer, but a built-in aide for creating regular expressions inside Emacs is re-builder.

    M-x re-builder
    
    0 讨论(0)
  • 2020-12-09 16:43

    FWIW, emacs-lisp-mode will fontify the special expressions (like \\( and \\) for you. You can then change the faces to be something that stands out.

    (They are font-lock-regexp-grouping-construct and font-lock-regexp-grouping-backslash)

    0 讨论(0)
提交回复
热议问题