Opened 17 years ago
Closed 17 years ago
#521 closed Bugs (Invalid)
[Regex] Splitting string: last empty token is "compressed"
| Reported by: | nobody | Owned by: | John Maddock |
|---|---|---|---|
| Milestone: | Component: | regex | |
| Version: | None | Severity: | |
| Keywords: | Cc: |
Description
toto_lists@hotbox.ru
Last empty token is "compressed" when using regex_token_iterator for splitting strings.
BCB 5.64, boost 1.33.0
See the example, compare it with string_algo splitting:
#include <boost\regex.hpp>
#include <string>
#include <vector>
#include <iostream>
#include <boost/algorithm/string/finder.hpp>
#include <boost/algorithm/string/find_iterator.hpp>
void with_stringAlgo() {
using namespace std;
vector<string> result;
string to_split("&|&_field2_&|&_field3_&|&");
boost::split_iterator<string::iterator>
i(to_split.begin(),to_split.end(),boost::first_finder("&|&")),j;
for(;i!=j;++i) {
result.push_back(boost::copy_range<std::string>(*i));
}
cout<<"size is "<<result.size()<<endl;
for(int i=0;i<result.size();++i)
cout<<result[i]<<endl;
}
void with_regex() {
using namespace std;
using namespace boost;
using namespace boost::regex_constants;
string s("&|&_field2_&|&_field3_&|&");
boost::regex r("&\\|&");//use &|& as delimiter
boost::sregex_token_iterator i(s.begin(),s.end(),r,-1,
match_default),j;
//
vector<string> v;
copy(i,j,back_inserter(v));
//
cout<<"size is "<<v.end()-v.begin()<<endl;
copy(v.begin(),v.end(),ostream_iterator<string>(cout,"\n"));
}
int main() {
with_stringAlgo();
with_regex();
}
Note:
See TracTickets
for help on using tickets.
