在elisp中转义反斜杠

6

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

ELISP> "\\"
"\\"
ELISP> "\\]"
"\\]"
ELISP> "\]"
"]"

这里发生了什么?为什么第一个反斜杠没有转义第二个反斜杠?

不理解这个问题。在最后一个示例中只有一个反斜杠,它是“第二个”吗? - Barmar
1个回答

9
你所忽略的是字符串打印方式与输入方式相同。如果字符串中包含需要转义的字符,则在该字符前会打印出反斜杠。但如果它包含的字符不需要转义,则不会有反斜杠打印出现。
当你输入"\\"时,它会创建一个包含单个反斜杠字符的字符串,并以"\\"形式打印。
当你输入"\\["时,它会创建一个包含反斜杠和方括号的字符串,并以"\\["形式打印。
当你输入"\["时,反斜杠将转义方括号。这种转义是多余的,因为方括号不需要转义。因此,它创建的字符串与"["相同:一个包含单个方括号字符的字符串。它以"["形式打印,因为不需要转义方括号。

2
我会补充一下:请参阅(elisp) Syntax for Strings(在Emacs Lisp手册中,使用g Syntax for Strings)。永远记住:在Lisp字符串中,您需要将反斜杠的数量加倍。 - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接