summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-02-12 20:09:27 +0000
committerRich Hickey <richhickey@gmail.com>2008-02-12 20:09:27 +0000
commit91ab7d7ccee1bc8236591b90100f8b0dd3163034 (patch)
treede0e23aa53ccf8c6722398a99af98ce50b10347c
parent76c5f7d547b6c424ccd9523a340883e1597551ce (diff)
added re-seq, re-matches, nth support for matcher
-rw-r--r--src/boot.clj11
-rw-r--r--src/jvm/clojure/lang/RT.java7
2 files changed, 16 insertions, 2 deletions
diff --git a/src/boot.clj b/src/boot.clj
index 653d938f..0dfec8ea 100644
--- a/src/boot.clj
+++ b/src/boot.clj
@@ -1248,3 +1248,14 @@ test [v]
(do (f) :ok)
:no-test)))
+(defn re-seq [#^java.util.regex.Pattern re s]
+ (let [m (. re (matcher s))]
+ ((fn step []
+ (when (. m (find))
+ (lazy-cons (. m (group)) (step)))))))
+
+(defn re-matches [#^java.util.regex.Pattern re s]
+ (let [m (. re (matcher s))]
+ (when (. m (matches))
+ m)))
+
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index aeb2b6e7..8d95b2ac 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -17,6 +17,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Arrays;
+import java.util.regex.Matcher;
import java.io.*;
import java.lang.reflect.Array;
@@ -491,10 +492,12 @@ static public Object nth(Object coll, int n){
return ((IPersistentVector) coll).nth(n);
else if(coll instanceof String)
return Character.valueOf(((String) coll).charAt(n));
- else if(coll instanceof List)
- return ((List) coll).get(n);
else if(coll.getClass().isArray())
return Array.get(coll, n);
+ else if(coll instanceof List)
+ return ((List) coll).get(n);
+ else if(coll instanceof Matcher)
+ return ((Matcher)coll).group(n+1);
else if(coll instanceof Map.Entry)
{
Map.Entry e = (Map.Entry) coll;