summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-02-12 23:00:01 +0000
committerRich Hickey <richhickey@gmail.com>2008-02-12 23:00:01 +0000
commit60a042173db6cc290b32f925fa56747a0cdc1a80 (patch)
treeb66be3903a4398507b5ea434753687eb83364aad
parent91ab7d7ccee1bc8236591b90100f8b0dd3163034 (diff)
added re-groups and use in re-seq and re-matches
-rw-r--r--src/boot.clj15
-rw-r--r--src/jvm/clojure/lang/RT.java2
2 files changed, 13 insertions, 4 deletions
diff --git a/src/boot.clj b/src/boot.clj
index 0dfec8ea..34826977 100644
--- a/src/boot.clj
+++ b/src/boot.clj
@@ -1248,14 +1248,23 @@ test [v]
(do (f) :ok)
:no-test)))
+(defn re-groups [#^java.util.regex.Matcher m]
+ (let [gc (. m (groupCount))]
+ (if (zero? gc)
+ (. m (group))
+ (loop [ret [] c 0]
+ (if (<= c gc)
+ (recur (conj ret (. m (group c))) (inc c))
+ ret)))))
+
(defn re-seq [#^java.util.regex.Pattern re s]
(let [m (. re (matcher s))]
((fn step []
- (when (. m (find))
- (lazy-cons (. m (group)) (step)))))))
+ (when (. m (find))
+ (lazy-cons (re-groups m) (step)))))))
(defn re-matches [#^java.util.regex.Pattern re s]
(let [m (. re (matcher s))]
(when (. m (matches))
- m)))
+ (re-groups m))))
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 8d95b2ac..86e225dc 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -497,7 +497,7 @@ static public Object nth(Object coll, int n){
else if(coll instanceof List)
return ((List) coll).get(n);
else if(coll instanceof Matcher)
- return ((Matcher)coll).group(n+1);
+ return ((Matcher)coll).group(n);
else if(coll instanceof Map.Entry)
{
Map.Entry e = (Map.Entry) coll;