\]
正規表現に含めるために、elisp で文字列を作成しようとしています。文字列を返すと文字列\\]
を取得します\\]
が、文字列を返すと文字列\]
を取得します]
。これは私にはまったく意味がありません。ielm からの出力は次のとおりです。
ELISP> "\\"
"\\"
ELISP> "\\]"
"\\]"
ELISP> "\]"
"]"
ここで何が起こっているのか。最初のバックスラッシュが 2 番目のバックスラッシュをエスケープしないのはなぜですか?
あなたが見逃しているのは、文字列が入力するのと同じ方法で印刷されることです。そのため、文字列にエスケープが必要な文字が含まれている場合、その前にバックスラッシュが出力されます。ただし、エスケープを必要としない文字が含まれている場合は、出力されません。
と入力する"\\"
と、単一のバックスラッシュ文字を含む文字列が作成されます。これは として出力され"\\"
ます。
と入力する"\\["
と、バックスラッシュと角括弧の 2 文字を含む文字列が作成されます。これは として出力され"\\["
ます。
と入力する"\["
と、バックスラッシュが角かっこをエスケープします。角括弧はエスケープする必要がないため、このエスケープは冗長です。したがって、次のように同じ文字列を作成します"["
: 単一の角括弧文字を含む文字列。"["
角かっこをエスケープする必要がないため、これは として出力されます。