clojure 新手指南(11):正则表达式

接着上篇,继续我们的时间和日期函数的探讨。我们可以定义一个函数,将一个日期字符串分成一个列表。列表元素分别为年、月、日、时、分、秒。为了完成这个字符串分割操作,我们使用“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没什么关系了。

你可能感兴趣的:(java,lisp,clojure)