diff options
-rw-r--r-- | regex.c | 10 | ||||
-rw-r--r-- | txr.1 | 21 |
2 files changed, 29 insertions, 2 deletions
@@ -2464,7 +2464,13 @@ val match_regex(val str, val reg, val pos) val i, retval; regm_result_t last_res = REGM_INCOMPLETE; - pos = default_arg(pos, zero); + if (null_or_missing_p(pos)) { + pos = zero; + } else if (lt(pos, zero)) { + pos = plus(pos, length_str(str)); + if (lt(pos, zero)) + return nil; + } regex_machine_init(®m, reg); @@ -2497,6 +2503,8 @@ val match_regex_right(val str, val regex, val end) if (null_or_missing_p(end) || gt(end, slen)) end = slen; + else if (lt(end, zero)) + end = plus(end, slen); while (le(pos, end)) { cons_bind (from, len, search_regex(str, regex, pos, nil)); @@ -31748,9 +31748,18 @@ matches at .meta position in .metn string . + If .meta position -is not specified, it is taken to be zero. +is not specified, it is taken to be zero. Negative values +of +.meta position +index from the right end of the string such that -1 +refers to the last character. Excessively negative +values which index before the first character cause +.code nil +to be returned. + If the regex matches, then the length of the match is returned. If it does not match, then .code nil @@ -31778,10 +31787,20 @@ function tests whether contains a match which ends precisely on the character just before .metn end-position . + If .meta end-position is not specified, it defaults to the length of the string, and the function performs a right-anchored regex match. +The +.meta end-position +argument can be a negative integer, in which case it denotes +positions from the end of the string, such that -1 refers +to the last character. If the value is excessively negative such +that the position immediately before it is before the start +of the string, then +.code nil +is returned. If a match is found, then the length of the match is returned. |