接着上篇,继续我们的时间和日期函数的探讨。我们可以定义一个函数,将一个日期字符串分成一个列表。列表元素分别为年、月、日、时、分、秒。为了完成这个字符串分割操作,我们使用“re-split‘函数。re-split函数需要一个正则表达式参数用于确定如何分割字符串。Clojure 依赖java的正则表达式库来处理这些操作。
re-split函数是Clojure Contrib中字符串库的一部分,所以这就需要确保你能访问Clojure Contrib库。你可以用下面这种方式来加载字符串工具库。(注意,记得进入REPL时要加载contrib.jar,忘了点这 )
=> (use 'clojure.contrib.str-utils)
nil
一旦加载完库,我们就可以使用re-split了:
=>(re-split #" " "2011 06 04 17 50 21")
("2011" "06" "04" "17" "50" "21")
=>(class #" ")
java.util.regex.Pattern
=>(re-split #":" "2011:06:04:17:50:21")
("2011" "06" "04" "17" "50" "21")
我们上面用到的正则表达式非常直白。它们以”#“开头,后面跟着包含需要匹配的正则模式。正则表达式非常复杂,不是本文重点,这里只是讲解clojure的相关用法。
让我们随便看几个例子:
=>(re-split #"\:" "2011:06:04:17:50:21")
("2011" "06" "04" "17" "50" "21")
方括号里代表符合其中一个即可:
=>(re-split #"[\/\:]" "2011/06/04 17:51:00")
("2011" "06" "04 17" "51" "00")
最后我们尝试构建自己的日期元素列表函数date-list
=>(defn date-list
([](re-split #"\W+" (format-date)))
([systime](re-split #"\W+" (format-date systime))))
=>(date-list)
("2011" "06" "05" "11" "21" "21")
本章没什么新内容,主要难点就在正则表达式上。不过这个和clojure没什么关系了。