在 clojure 中的重新查找函数中的动态正则表达式参数



我在clojure中使用了re-find功能,并且有类似的东西这:

(defn some-function []
(re-find #"(?i)blah" "some sentence"))

我想要的是让"blah"动态,所以我像这样用 var 代替了 blah,但是它不起作用:

(defn some-function2 [some-string]
(re-find #(str "(?i)" some-string) "some sentence"))

我很惊讶这不起作用,因为 LISP 应该"像对待数据一样对待代码"。

使用函数re-pattern。 #"只是一个读取器宏(又名用于创建正则表达式的语法糖)

#(str "(?i)" some-string) 是用于创建匿名函数的读取器宏。

要在 Clojure 中从字符串值创建模式,您可以使用重新模式:

(re-pattern (str "(?i)" some-string))

您没有提到的一件事是some-string是否应包含有效的正则表达式,或者它是否是任意字符串值。如果some-string是一个任意字符串值(你想要完全匹配),你应该在使用它来构建正则表达式之前引用它:

(re-pattern (str "(?i)" (java.util.regex.Pattern/quote some-string)))

最新更新