> (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]
我错过了什么吗?
答案 0 :(得分:6)
Pattern p = Pattern.compile("\\.");
在Java中,"\\."
是普通字符串。因此,您必须转义反斜杠才能在正则表达式中表示\
。
user=> (clojure.string/split "clojure.org" #"\.")
["clojure" "org"]
在Clojure中,#"\."
是正则表达式。模式中的反斜杠被视为自身(并且不需要使用额外的反斜杠进行转义)
以下网页会有所帮助。 (查找"正则表达式模式"在页面中)