5

\]正規表現に含めるために、elisp で文字列を作成しようとしています。文字列を返すと文字列\\]を取得します\\]が、文字列を返すと文字列\]を取得します]。これは私にはまったく意味がありません。ielm からの出力は次のとおりです。

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

ここで何が起こっているのか。最初のバックスラッシュが 2 番目のバックスラッシュをエスケープしないのはなぜですか?

4

1 に答える 1

7

あなたが見逃しているのは、文字列が入力するのと同じ方法で印刷されることです。そのため、文字列にエスケープが必要な文字が含まれている場合、その前にバックスラッシュが出力されます。ただし、エスケープを必要としない文字が含まれている場合は、出力されません。

と入力する"\\"と、単一のバックスラッシュ文字を含む文字列が作成されます。これは として出力され"\\"ます。

と入力する"\\["と、バックスラッシュと角括弧の 2 文字を含む文字列が作成されます。これは として出力され"\\["ます。

と入力する"\["と、バックスラッシュが角かっこをエスケープします。角括弧はエスケープする必要がないため、このエスケープは冗長です。したがって、次のように同じ文字列を作成します"[": 単一の角括弧文字を含む文字列。"["角かっこをエスケープする必要がないため、これは として出力されます。

于 2013-02-05T06:47:34.417 に答える