diff --git a/src/switch_regex.c b/src/switch_regex.c index d613cda16a..c2d595a22a 100644 --- a/src/switch_regex.c +++ b/src/switch_regex.c @@ -109,6 +109,7 @@ SWITCH_DECLARE(int) switch_regex_perform(const char *field, const char *expressi ovector, /* vector of integers for substring information */ olen); /* number of elements (NOT size in bytes) */ + if (match_count <= 0) { switch_regex_safe_free(re); match_count = 0; @@ -145,7 +146,12 @@ SWITCH_DECLARE(void) switch_perform_substitution(switch_regex_t *re, int match_c } index[z++] = '\0'; z = 0; - num = atoi(index); + if (match_count > 1) { + int offset = match_count - 2; + num = atoi(index) + offset; + } else { + num = atoi(index); + } if (pcre_copy_substring(field_data, ovector, match_count, num, replace, sizeof(replace)) > 0) { switch_size_t r;