これを試してみたら
(import java.util.regex.Pattern)
(Pattern/compile ")!@#$%^&*()")
またはこれ
(def p #")!@#$%^&*()")
私はClojureに、比類のない/閉じられていないものがあると不平を言ってい)
ます。この単純な文字列内で角かっこが評価されるのはなぜですか?それらを脱出する方法は?ありがとう
編集:エスケープはclojure固有の構文(#""
)で機能しPattern/compile
ますが、文字列から正規表現パターンを動的にコンパイルする必要があるため、必要な構文では機能しません。
で試しましたre-pattern
が、何らかの理由で適切に脱出できません。
(re-pattern "\)!@#$%^&*\(\)")
java.lang.Exception: Unsupported escape character: \)
java.lang.Exception: Unable to resolve symbol: ! in this context (NO_SOURCE_FILE:0)
java.lang.Exception: No dispatch macro for: $
java.lang.Exception: Unable to resolve symbol: % in this context (NO_SOURCE_FILE:0)
java.lang.IllegalArgumentException: Metadata can only be applied to IMetas
編集2この小さな関数は役立つかもしれません:
(defn escape-all [x]
(str "\\" (reduce #(str %1 "\\" %2) x)))