diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-02-12 23:00:01 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-02-12 23:00:01 +0000 |
commit | 60a042173db6cc290b32f925fa56747a0cdc1a80 (patch) | |
tree | b66be3903a4398507b5ea434753687eb83364aad | |
parent | 91ab7d7ccee1bc8236591b90100f8b0dd3163034 (diff) |
added re-groups and use in re-seq and re-matches
-rw-r--r-- | src/boot.clj | 15 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 2 |
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; |