7

clojureでエスケープ"*"するにはどうすればよいですか? "\*"それを機能させることができないようです:

(s/replace "A*B" #"*" "*")生産します "A*B"(もちろん)

(s/replace "A*B" #"*" "\*")失敗します:Unsupported escape character: *

(s/replace "A*B" #"*" "\\*")またプロデュース "A*B"

(s/replace "A*B" #"*" "\\\*")失敗:Unsupported escape character: *もう一度!

(s/replace "A*B" #"\\\\*" "*")生産する "A\\*B"

私はそれを生み出すことができませんA\*B 何かアイデアはありますか?ありがとう

4

1 に答える 1

8

4 つのバックスラッシュを使用する必要があります。

> (println (clojure.string/replace "A*B" #"\*" "\\\\*"))
A\*B
nil
>  

または、正規表現なしでは、次のようになります。

> (println (clojure.string/replace "A*B" "*" "\\*"))
A\*B
nil
>  

これを正規表現パターンとして使用するには、次のre-pattern関数を使用します。

> (def p (clojure.string/replace "A*B" #"\*" "\\\\*"))
#'sandbox17459/p
> (println p)
A\*B
nil
> (clojure.string/replace "BLA*BLA" (re-pattern p) "UH")
"BLUHLA"
>  
于 2013-07-24T12:37:28.043 に答える