如何编写Clojure宏以从String创建正则表达式?

dir*_*ond 11 regex macros clojure

我正在创建一个便利宏.方便的一部分是可以使用String而不是#"re"表示法指定正则表达式.

我无法弄清楚的一个部分是如何让宏获取String并将其重写为Clojure正则表达式(例如,生成#"re"表示法).我认为这是一个语法/逃避问题.

我的第一次天真尝试(假装我只想要String-to-regex部分):

(defmacro mymac [mystr] `#~mystr)
Run Code Online (Sandbox Code Playgroud)

是否有可能做我想做的事情?或者,是否有一个实际的函数来获取String并生成一个正则表达式,而不是使用#reader宏?

或者我应该放入Java并使用java.util.regex.Pattern?

j-g*_*tus 29

它有一个功能:重新模式

user=> (re-pattern "\\d+")
#"\d+"
Run Code Online (Sandbox Code Playgroud)


kot*_*rak 7

再解释一下:

#""读者宏.它在阅读时由读者解决.因此,没有办法创建一个扩展为读取器宏的宏,因为读取阶段早已消失.宏返回表示扩展代码的实际数据结构,而不是像例如那样再次解析的字符串.#define在C中工作.

jg-faustus的答案是正确的方式(tm).