如何将值重新匹配为正则表达式而不是字符串常量

时间:2014-10-14 20:01:15

标签: regex clojure

我正在尝试将值传递给clojure的重新匹配函数以获得正则表达式,如此

(defn extract-val
[k data]
  (let [r (format ".*\"%s\":\"(.*?)\".*" k)
        v ((last (re-matches #(str r) data)))]
 v))

将此功能称为     (extract-val“event”“{\”event \“:\”data \“}”)

抛出一个类强制转换异常,并带有一条消息,告知无法强制转换为java.util.regex.Pattern clojure.core / re-matcher

有没有办法做到这一点,或者我必须直接使用regex.Pattern

1 个答案:

答案 0 :(得分:3)

#(str r)创建一个0参数的匿名函数,在调用时计算str r。您可以使用re-pattern

创建模式
(last (re-matches (re-pattern r) data)

如果你正在处理JSON,你应该使用解析器而不是正则表达式。