Se provo questoEscaping parentesi Clojure
(import java.util.regex.Pattern)
(Pattern/compile ")[email protected]#$%^&*()")
o questo
(def p #")[email protected]#$%^&*()")
ho Clojure lamentando che ci sia un ineguagliabile/non chiusa )
. Perché le parentesi sono valutate all'interno di questa semplice stringa? Come sfuggirli? Grazie
EDIT: Durante la fuga opere nella sintassi specifica per clojure (#""
), non funziona con il Pattern/compile
sintassi che ho bisogno perché devo compilare il picchiettio regex in modo dinamico da una stringa.
Ho provato con re-pattern
, ma non posso sfuggire correttamente per qualche motivo:
(re-pattern "\)[email protected]#$%^&*\(\)")
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
EDIT 2 Questa piccola funzione potrebbe aiutare:
(defn escape-all [x]
(str "\\" (reduce #(str %1 "\\" %2) x)))
Per inciso, non penso che sia necessario importare, è sufficiente utilizzare la funzione 're-pattern' di Clojure. –
hai ragione. ancora, non riesco a farlo funzionare. vedi la mia modifica, per favore. – pistacchio