我一直在尝试让一个简单的 reg-ex 在 Clojure 中工作,以测试一些 SQL 保留字(select、from、where 等)的字符串,但无法让它工作:
(defn areserved? [c]
(re-find #"select|from|where|order by|group by" c))
(我用空格分割一个字符串,然后遍历所有单词)
帮助将不胜感激,
谢谢!
编辑:我的第一个目标(在只阅读了一些示例和基本 Clojure 材料之后)是解析一个字符串并为它的每个部分(即单词)返回它们在语句中的“工作”(保留字、字符串等)。 )。
到目前为止我所拥有的:
(use '[clojure.string :only (join split)])
(defn isdigit? [c]
(re-find #"[0-9]" c))
(defn isletter? [c]
(re-find #"[a-zA-Z]" c))
(defn issymbol? [c]
(re-find #"[\(\)\[\]!\.+-><=\?*]" c))
(defn isstring? [c]
(re-find #"[\"']" c))
(defn areserved? [c]
(if (re-find #"select|from|where|order by|group by" c)
true
false))
(defn what-is [token]
(let [c (subs token 0 1)]
(cond
(isletter? c) :word
(areserved? c) :reserved
(isdigit? c) :number
(issymbol? c) :symbol
(isstring? c) :string)))
(defn checkr [token]
{:token token
:type (what-is token)})
(defn goparse [sql-str]
(map checkr (.split sql-str " ")))
感谢所有的帮助家伙!很高兴看到对这种相对较新的语言有如此多的支持(至少对我来说:))