summaryrefslogtreecommitdiffstats
path: root/regex.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-02-20 03:18:41 -0800
committerKaz Kylheku <kaz@kylheku.com>2015-02-20 03:18:41 -0800
commit7197508cb5460ad4c18dfbffd07f8cc411d37065 (patch)
tree2dd9f9a93808ec15b29afd61002b21a8eab33762 /regex.c
parentc554153d3fe9a21e57854d3174e2804adfb22f00 (diff)
downloadtxr-7197508cb5460ad4c18dfbffd07f8cc411d37065.tar.gz
txr-7197508cb5460ad4c18dfbffd07f8cc411d37065.tar.bz2
txr-7197508cb5460ad4c18dfbffd07f8cc411d37065.zip
String-returning wrappers for some regex matching functions.
* eval.c (eval_init): Register search-regst, match-regst and match-regst-right intrinsics. * regex.c (search_regst, match_regst, match_regst_right): New functions. * regex.h (search_regst, match_regst, match_regst_right): Declared. * txr.1: Documented new variants.
Diffstat (limited to 'regex.c')
-rw-r--r--regex.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/regex.c b/regex.c
index f3b4ffc6..1c7c63a3 100644
--- a/regex.c
+++ b/regex.c
@@ -2131,6 +2131,27 @@ val regsub(val regex, val repl, val str)
return cat_str(out, nil);
}
+val search_regst(val haystack, val needle_regex, val start_num, val from_end)
+{
+ val range = range_regex(haystack, needle_regex, start_num, from_end);
+ return if2(range, sub_str(haystack, car(range), cdr(range)));
+}
+
+val match_regst(val str, val regex, val pos_in)
+{
+ val pos = default_arg(pos_in, zero);
+ val len = match_regex(str, regex, pos);
+ return if2(len, sub_str(str, pos, plus(pos, len)));
+}
+
+val match_regst_right(val str, val regex, val end)
+{
+ val len = match_regex_right(str, regex, end);
+ return if2(len, if3(null_or_missing_p(end),
+ sub_str(str, neg(len), t),
+ sub_str(str, minus(end, len), end)));
+}
+
val space_k, digit_k, word_char_k;
val cspace_k, cdigit_k, cword_char_k;