【问题标题】:dynamic regex argument in re-find function in clojureclojure中重新查找函数中的动态正则表达式参数
【发布时间】:2014-03-05 16:46:00
【问题描述】:

我正在使用 clojure 中的重新查找功能,并且有类似的东西 这个:

(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 应该“将代码视为数据”。

【问题讨论】:

标签: regex clojure


【解决方案1】:

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

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

【讨论】:

  • 我同意,re-pattern 是最简单的方法。它从字符串构建正则表达式模式。要回答 OP 的问题,您可以使用(re-find (re-pattern (str "(?i)" some-string)) "some sentence")
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-16
    • 2021-12-31
    • 2023-03-12
    • 2021-06-16
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多