如何使用 clojure.string/replace 在前面添加反斜杠

Ale*_*eph 1 regex string clojure

我正在尝试使用clojure.string/replace反斜杠(如ex*mple-> ex\*mple)来转义星号和反引号等某些字符,但我无法理解该函数自己的转义规则:

如果我尝试(cs/replace "ex*mple" #"[\*`]" "\\$0"),它会按$0字面意思处理并返回ex$0mple

如果我尝试(cs/replace "ex*mple" #"[\*`]" "\\\\$0")它会添加两个斜杠:ex\\*mple.

正确的做法是什么?

exu*_*ero 5

你的第二种方法(cs/replace "ex*mple" #"[\*`]" "\\\\$0")是正确的。您在结果中看到两个反斜杠的原因是因为这就是 Clojure 在字符串中显示单个反斜杠的方式。如果您打印"ex\\*mple",您会看到ex\*mple

Clojure 使用反斜杠作为字符串中的转义字符,因此必须对反斜杠本身进行转义。ex\*mple不是 Clojure 中的有效字符串,因为\*它是不受支持的转义字符。