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 が一致引数として正規表現パターンを持っている場合、置換文字列内のドル記号 ($) およびバックスラッシュ (\) 文字は特別に扱われます。
これはバグではありません。3 番目のパラメーターの関数によって返される文字列は、次のようなことができるようにエスケープ シーケンスを解析します。
(clojure.string/replace "The color? is red." #"([?.])" "\\$1$1")
; => "The color$1? is red$1."
最初の $ がバックスラッシュでエスケープされているのに対し、2 番目の $ はキャプチャ グループの識別子として機能することに注意してください。4 つのバックスラッシュを使用するようにコードを変更すると、機能します。
(clojure.string/replace "The color? is red." #"[?.]" #(str "zzz\\\\j" %1 %1))