我想我在 clojure 中发现了一个错误,谁能解释为什么输出中缺少反斜杠?
(clojure.string/replace "The color? is red." #"[?.]" #(str "zzz\j" %1 %1))
=> "The colorzzzj?? is redzzzj.."
这不是
一个错误。第 3 个参数中的函数返回的字符串将针对转义序列进行分析,以便您可以执行以下操作:
(clojure.string/replace "The color? is red." #"([?.])" "\$1$1")
; => "The color$1? is red$1."
请注意第一个 $ 如何通过反斜杠进行转义,而第二个 $ 用作捕获组的标识符。将您的代码更改为使用四个反斜杠,它可以工作:
(clojure.string/replace "The color? is red." #"[?.]" #(str "zzz\\j" %1 %1))
请查看函数文档: http://clojuredocs.org/clojure_core/clojure.string/replace
具体说来:
注意:当替换优先或替换时,将正则表达式模式作为其 匹配参数、美元符号 ($) 和反斜杠 (\) 字符 替换字符串经过特殊处理。