Hi all, I have a question regarding boost::regex. I have one regex which should identify my string AND cut it into pieces. I've tried with regex_token_iterator and cmatch and failed. code: #include <string> #include <iostream> #include <boost/regex.hpp> int main() { std::string s("s0,s1,s2"); boost::regex re("^(s[0-9])(,s[0-9])*$"); // 1. attempt boost::sregex_token_iterator i(s.begin(), s.end(), re), j; while(i!=j) { std::cout << *i++ << std::endl; } // 2. attempt boost::cmatch matches; if(boost::regex_search(s.c_str(), matches, re)) { for(int p=0, q=matches.size(); p<q; p++) { std::string match(matches[p].first, matches[p].second); std::cout << match << std::endl; } } } output: s0,s1,s2 s0,s1,s2 s0 ,s2 desired output: s0,s1,s2 s0 ,s1 ,s2 Any hints how to do this in one step? Thanks!
I have a question regarding boost::regex.
I have one regex which should identify my string AND cut it into pieces. I've tried with regex_token_iterator and cmatch and failed.
How about (caution, untested, off the top of my head!): #include <string> #include <iostream> #include <boost/regex.hpp> int main() { std::string s("s0,s1,s2"); boost::regex re("\\s*(s[0-9])\\s*(?:,\\s*)?"); // 1. attempt boost::sregex_token_iterator i(s.begin(), s.end(), re, 1), j; while(i!=j) { std::cout << *i++ << std::endl; } } HTH, John.
How about (caution, untested, off the top of my head!):
#include <string> #include <iostream> #include <boost/regex.hpp>
int main() { std::string s("s0,s1,s2"); boost::regex re("\\s*(s[0-9])\\s*(?:,\\s*)?");
// 1. attempt boost::sregex_token_iterator i(s.begin(), s.end(), re, 1), j; while(i!=j) { std::cout << *i++ << std::endl; } }
HTH, John.
Thanks, that solved my problem.
participants (2)
-
Dejan
-
John Maddock