diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-02-20 03:18:41 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-02-20 03:18:41 -0800 |
commit | 7197508cb5460ad4c18dfbffd07f8cc411d37065 (patch) | |
tree | 2dd9f9a93808ec15b29afd61002b21a8eab33762 /regex.c | |
parent | c554153d3fe9a21e57854d3174e2804adfb22f00 (diff) | |
download | txr-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.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -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; |