Clojure字符串取代了奇怪的行为



我想我在 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

具体说来:

注意:当替换优先或替换时,将正则表达式模式作为其 匹配参数、美元符号 ($) 和反斜杠 (\) 字符 替换字符串经过特殊处理。

最新更新