From c3573454d1f5a5815173be5c7838a31adfa731a0 Mon Sep 17 00:00:00 2001 From: penguindark <57967770+penguindark@users.noreply.github.com> Date: Wed, 2 Feb 2022 09:52:18 +0100 Subject: [PATCH] regex: fix bug in replace_by_fn (#13344) --- vlib/regex/regex_test.v | 16 +++++++++++++++- vlib/regex/regex_util.v | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/vlib/regex/regex_test.v b/vlib/regex/regex_test.v index 911154b833..a31e354e41 100644 --- a/vlib/regex/regex_test.v +++ b/vlib/regex/regex_test.v @@ -596,6 +596,21 @@ fn test_regex_func(){ } } +fn my_repl_1(re regex.RE, in_txt string, start int, end int) string { + s0 := re.get_group_by_id(in_txt,0) + println("[$start, $end] => ${s0}") + return "a" + s0.to_upper() +} + +fn test_regex_func_replace1(){ + txt := "abbabbbabbbbaabba" + query := r"a(b+)" + mut re := regex.regex_opt(query) or { panic(err) } + result := re.replace_by_fn(txt, my_repl_1) + + assert result == "aBBaBBBaBBBBaaBBa" +} + fn my_repl(re regex.RE, in_txt string, start int, end int) string { s0 := re.get_group_by_id(in_txt,0)[0..1] + "X" s1 := re.get_group_by_id(in_txt,1)[0..1] + "X" @@ -603,7 +618,6 @@ fn my_repl(re regex.RE, in_txt string, start int, end int) string { return "${s0}${s1}${s2}" } - // test regex replace function fn test_regex_func_replace(){ filler := "E il primo dei tre regni dell'Oltretomba cristiano visitato da Dante nel corso del viaggio, con la guida di Virgilio." diff --git a/vlib/regex/regex_util.v b/vlib/regex/regex_util.v index dfb8b68de9..7e69ed72b4 100644 --- a/vlib/regex/regex_util.v +++ b/vlib/regex/regex_util.v @@ -212,7 +212,7 @@ pub fn (mut re RE) find(in_txt string) (int, int) { [direct_array_access] pub fn (mut re RE) find_from(in_txt string, start int) (int, int) { old_flag := re.flag - re.flag |= f_src // enable search mode + // re.flag |= f_src // enable search mode mut i := start if i < 0 {