Opened 13 years ago

Closed 10 years ago

#4103 closed Bugs (wontfix)

erase_all_regex does not work well with possibly empty strings.

Reported by: Paolo Bolzoni <bolzoni@…> Owned by: Marshall Clow
Milestone: Boost 1.43.0 Component: algorithm
Version: Boost Development Trunk Severity: Problem
Keywords: Cc:

Description

Here is a test case, I want to remove all the substrings that matches the regular expression '\s*': all spaces, tabs and similars.

 $ cat test_case.cc 
 
 #include <boost/algorithm/string/regex.hpp>
 #include <iostream>
 #include <string>
 
 boost::regex const& spaces() {
     static boost::regex rv("\\s*");
     return rv;
 }
 
 int main() {
     std::string e1("  Leading spaces!   Remove them   all!   ");
     std::string c1(e1);
     std::string e2("No  trailing  or leading... Remove     them all!");
     std::string c2(e2);
 
     boost::erase_all_regex(e1, spaces());
     std::cout << "Erased:   -" << e1 << "-" << std::endl;
     std::cout << "Original: -" << c1 << "-" << std::endl;
 
     std::cout << std::endl;
 
     boost::erase_all_regex(e2, spaces());
     std::cout << "Erased:   -" << e2 << "-" << std::endl;
     std::cout << "Original: -" << c2 << "-" << std::endl;
 }
 
 $ g++ -lboost_regex -W -Wall -pedantic -o test_case test_case.cc 
 $ ./test_case 
 Erased:   -Leading spaces!   Remove them   all!   -
 Original: -  Leading spaces!   Remove them   all!   -
 
 Erased:   -No  trailing  or leading... Remove     them all!-
 Original: -No  trailing  or leading... Remove     them all!-
 $

I think the expected output should not have spaces in the output string. Instead only the leading spaces are removed.

While the problem still persist with '\s*' the bug apparead also with regex '\s+' in the version 1.41, but using the svn trunk downloaded yesterday it disappeared. It is worth to note because the bug is not very grave anymore. It is enough to use a regex that does not allow empty strings.

Change History (5)

comment:1 by Steven Watanabe, 13 years ago

Component: Nonestring_algo
Owner: set to Pavol Droba

comment:2 by Steven Watanabe, 12 years ago

It looks like an empty match is taken as the sentinel to indicate that there is no match.

comment:3 by Marshall Clow, 11 years ago

Component: string_algoalgorithm
Owner: changed from Pavol Droba to Marshall Clow

comment:4 by Marshall Clow, 10 years ago

This is still around in 1.51; but since there's an easy workaround (use a non-empty regex), I'm inclined not to fix this.

Comments?

comment:5 by Marshall Clow, 10 years ago

Resolution: wontfix
Status: newclosed
Note: See TracTickets for help on using tickets.