我正在尝试使用clojure.string/replace
来转义某些字符,例如带有反斜杠的星号和反引号(例如ex*mple
- > ex\*mple
),但我无法理解其功能&#39 ; s自己的逃避规则:
如果我尝试(cs/replace "ex*mple" #"[\*`]" "\\$0")
,它会按字面意思处理$0
并返回ex$0mple
。
如果我尝试(cs/replace "ex*mple" #"[\*`]" "\\\\$0")
,则会添加两个斜杠:ex\\*mple
。
这样做的正确方法是什么?
答案 0 :(得分:4)
您的第二种方法(cs/replace "ex*mple" #"[\*`]" "\\\\$0")
是正确的。你在结果中看到两个反斜杠的原因是因为这是Clojure在字符串中显示单个反斜杠的方式。如果您打印"ex\\*mple"
,则会看到ex\*mple
。
Clojure使用反斜杠作为字符串中的转义字符,因此必须转义反斜杠本身。 ex\*mple
不是Clojure中的有效字符串,因为\*
是不受支持的转义字符。