Revert "fix replaceRegexpAll bug"

This commit is contained in:
alexey-milovidov 2021-12-19 11:32:34 +03:00 committed by GitHub
parent d1d872329c
commit cee850b3be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 1 additions and 40 deletions

View File

@ -94,9 +94,6 @@ struct ReplaceRegexpImpl
re2_st::StringPiece matches[max_captures]; re2_st::StringPiece matches[max_captures];
size_t start_pos = 0; size_t start_pos = 0;
bool is_first_match = true;
bool is_start_pos_added_one = false;
while (start_pos < static_cast<size_t>(input.length())) while (start_pos < static_cast<size_t>(input.length()))
{ {
/// If no more replacements possible for current string /// If no more replacements possible for current string
@ -104,9 +101,6 @@ struct ReplaceRegexpImpl
if (searcher.Match(input, start_pos, input.length(), re2_st::RE2::Anchor::UNANCHORED, matches, num_captures)) if (searcher.Match(input, start_pos, input.length(), re2_st::RE2::Anchor::UNANCHORED, matches, num_captures))
{ {
if (is_start_pos_added_one)
start_pos -= 1;
const auto & match = matches[0]; const auto & match = matches[0];
size_t bytes_to_copy = (match.data() - input.data()) - start_pos; size_t bytes_to_copy = (match.data() - input.data()) - start_pos;
@ -116,13 +110,6 @@ struct ReplaceRegexpImpl
res_offset += bytes_to_copy; res_offset += bytes_to_copy;
start_pos += bytes_to_copy + match.length(); start_pos += bytes_to_copy + match.length();
/// To avoid infinite loop.
if (is_first_match && match.length() == 0 && !replace_one && input.length() > 1)
{
start_pos += 1;
is_start_pos_added_one = true;
}
/// Do substitution instructions /// Do substitution instructions
for (const auto & it : instructions) for (const auto & it : instructions)
{ {
@ -140,9 +127,8 @@ struct ReplaceRegexpImpl
} }
} }
if (replace_one || (!is_first_match && match.length() == 0)) if (replace_one || match.length() == 0) /// Stop after match of zero length, to avoid infinite loop.
can_finish_current_string = true; can_finish_current_string = true;
is_first_match = false;
} }
else else
can_finish_current_string = true; can_finish_current_string = true;

View File

@ -1,11 +0,0 @@
1
1
1
1
1
1
1
1
1
1
1

View File

@ -1,14 +0,0 @@
SELECT 'aaaabb ' == trim(leading 'b ' FROM 'b aaaabb ') x;
SELECT 'b aaaa' == trim(trailing 'b ' FROM 'b aaaabb ') x;
SELECT 'aaaa' == trim(both 'b ' FROM 'b aaaabb ') x;
SELECT '1' == replaceRegexpAll(',,1,,', '^[,]*|[,]*$', '') x;
SELECT '1' == replaceRegexpAll(',,1', '^[,]*|[,]*$', '') x;
SELECT '1' == replaceRegexpAll('1,,', '^[,]*|[,]*$', '') x;
SELECT '1,,' == replaceRegexpOne(',,1,,', '^[,]*|[,]*$', '') x;
SELECT '1' == replaceRegexpOne(',,1', '^[,]*|[,]*$', '') x;
SELECT '1,,' == replaceRegexpOne('1,,', '^[,]*|[,]*$', '') x;
SELECT '5935,5998,6014' == trim(BOTH ', ' FROM '5935,5998,6014, ') x;
SELECT '5935,5998,6014' == replaceRegexpAll('5935,5998,6014, ', concat('^[', regexpQuoteMeta(', '), ']*|[', regexpQuoteMeta(', '), ']*$'), '') AS x;