我想我在 clojure 中发现了一个错误,谁能解释为什么输出中缺少反斜杠?
(clojure.string/replace "The color? is red." #"[?.]" #(str "zzz\\j" %1 %1))
=> "The colorzzzj?? is redzzzj.."
我想我在 clojure 中发现了一个错误,谁能解释为什么输出中缺少反斜杠?
(clojure.string/replace "The color? is red." #"[?.]" #(str "zzz\\j" %1 %1))
=> "The colorzzzj?? is redzzzj.."
请查看函数文档:http ://clojuredocs.org/clojure_core/clojure.string/replace
具体来说:
注意:当 replace-first 或 replace 将正则表达式模式作为匹配参数时,替换字符串中的美元符号 ($) 和反斜杠 (\) 字符将被特殊处理。
这不是错误。函数在第三个参数中返回的字符串被解析为转义序列,以便您可以执行以下操作:
(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))