summaryrefslogtreecommitdiffstats
path: root/regex.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-01-26 23:42:20 -0800
committerKaz Kylheku <kaz@kylheku.com>2014-01-26 23:42:20 -0800
commitc150e646fa90409c412f07f59edbb897bdbb4997 (patch)
treeb4c4cfb5a2a95d57f7049e97574bbcec8b3b70f5 /regex.c
parenteee670172cca986245006e1c9a4f32f7d0b60895 (diff)
downloadtxr-c150e646fa90409c412f07f59edbb897bdbb4997.tar.gz
txr-c150e646fa90409c412f07f59edbb897bdbb4997.tar.bz2
txr-c150e646fa90409c412f07f59edbb897bdbb4997.zip
* regex.c (match_regex_right): New function.
* regex.h (match_regex_right): Declared. * eval.c (eval_init): Register match_regex_right as instrinsic.
Diffstat (limited to 'regex.c')
-rw-r--r--regex.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/regex.c b/regex.c
index 06e19cd2..67f17f60 100644
--- a/regex.c
+++ b/regex.c
@@ -1854,6 +1854,26 @@ val match_regex(val str, val reg, val pos)
return nil;
}
+val match_regex_right(val str, val regex, val pos)
+{
+ val slen = length(str);
+
+ if (!pos)
+ pos = zero;
+
+ for (;;) {
+ cons_bind (from, len, search_regex(str, regex, pos, nil));
+
+ if (!from)
+ return nil;
+
+ if (eql(plus(from, len), slen))
+ return len;
+
+ pos = plus(pos, one);
+ }
+}
+
val regsub(val regex, val repl, val str)
{
list_collect_decl (out, ptail);