1

我想我在 clojure 中发现了一个错误,谁能解释为什么输出中缺少反斜杠?

(clojure.string/replace "The color? is red." #"[?.]"  #(str "zzz\\j" %1 %1))

=> "The colorzzzj?? is redzzzj.."
4

2 回答 2

4

请查看函数文档:http ://clojuredocs.org/clojure_core/clojure.string/replace

具体来说:

注意:当 replace-first 或 replace 将正则表达式模式作为匹配参数时,替换字符串中的美元符号 ($) 和反斜杠 (\) 字符将被特殊处理。

于 2012-08-16T04:19:59.660 回答
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))
于 2012-08-16T04:22:51.677 回答