如果我试试这个
(import java.util.regex.Pattern)
(Pattern/compile ")!@#$%^&*()")
或这个
(def p #")!@#$%^&*()")
我有 Clojure 抱怨有一个 unmatched / unclosed )
。为什么要在这个简单的字符串中评估括号?如何逃脱他们?谢谢
编辑:虽然转义适用于 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)))