如何在clojure中按时段分割

时间:2017-01-04 15:11:17

标签: java clojure

> (clojure.string/split "clojure.org" #"\\.")

["clojure.org"]

我已阅读split的src,即

(defn split
  "Splits string on a regular expression.  Optional argument limit is
  the maximum number of splits. Not lazy. Returns vector of the splits."
  {:added "1.2"}
  ([^CharSequence s ^Pattern re]
     (LazilyPersistentVector/createOwning (.split re s)))
  ([ ^CharSequence s ^Pattern re limit]
     (LazilyPersistentVector/createOwning (.split re s limit))))

它内部调用Pattern.split。奇怪的是跟随代码工作,而Clojure没有

Pattern p = Pattern.compile("\\.");
System.out.println(Arrays.toString(p.split("clojure.org")));

# output
[clojure, org]

我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

Pattern p = Pattern.compile("\\.");

在Java中,"\\."是普通字符串。因此,您必须转义反斜杠才能在正则表达式中表示\

user=> (clojure.string/split "clojure.org" #"\.")
["clojure" "org"]

在Clojure中,#"\."是正则表达式。模式中的反斜杠被视为自身(并且不需要使用额外的反斜杠进行转义)

以下网页会有所帮助。 (查找"正则表达式模式"在页面中)

http://clojure.org/reference/reader