逃避反斜杠在elisp中

ima*_*son 5 string elisp escaping

我试图\]在elisp中创建字符串以包含在正则表达式中.当我返回字符串时,\\]我得到了字符串\\],但是当我返回字符串时,\]我得到字符串].这对我来说没有任何意义.这是ielm的输出:

ELISP> "\\"
"\\"
ELISP> "\\]"
"\\]"
ELISP> "\]"
"]"
Run Code Online (Sandbox Code Playgroud)

这里发生了什么.为什么不是第一个反斜杠逃脱第二个?

Bar*_*mar 6

您缺少的是字符串的打印方式与您键入它们的方式相同.因此,如果字符串包含需要转义的字符,则会在其前打印反斜杠.但如果它包含一个不需要转义的字符,则不会打印出一个字符.

键入时"\\",它会创建一个包含单个反斜杠字符的字符串.这打印为"\\".

键入时"\\[",它会创建一个包含两个字符的字符串:反斜杠后跟方括号.这打印为"\\[".

键入时"\[",反斜杠会转义方括号.这种转义是多余的,因为方括号不需要转义.因此它创建了相同的字符串"[":包含单个方括号字符的字符串.这被打印为"[",因为没有必要逃避方括号.

  • 我会添加以下内容:请参阅“(elisp) 字符串语法”(在 Emacs Lisp 手册中,使用“g 字符串语法”)。永远记住:在 Lisp 字符串中,将所需的反斜杠数量加倍。 (2认同)