我正在使用clojure中的重新查找功能,并且具有以下内容:
(defn some-function []
(re-find #"(?i)blah" "some sentence"))
Run Code Online (Sandbox Code Playgroud)
我想要的是让"blah"动态,所以我将var替换为blah,但它不起作用:
(defn some-function2 [some-string]
(re-find #(str "(?i)" some-string) "some sentence"))
Run Code Online (Sandbox Code Playgroud)
我很惊讶这不起作用,因为LISP应该"处理像数据一样的代码".
要在Clojure中从字符串值创建模式,您可以使用重新模式:
(re-pattern (str "(?i)" some-string))
Run Code Online (Sandbox Code Playgroud)
你没有提到的一件事some-string是预期是否包含有效的正则表达式或者它是否是一个任意的字符串值.如果some-string是一个任意的字符串值(你想要完全匹配),你应该在使用它来构建你的正则表达式之前引用它:
(re-pattern (str "(?i)" (java.util.regex.Pattern/quote some-string)))
Run Code Online (Sandbox Code Playgroud)