Reputation: 27201
How do I count the number of matches using C++11's std::regex
?
std::regex re("[^\\s]+");
std::cout << re.matches("Harry Botter - The robot who lived.").count() << std::endl;
Expected output:
7
Upvotes: 13
Views: 13249
Reputation: 22428
You can use this:
int countMatchInRegex(std::string s, std::string re)
{
std::regex words_regex(re);
auto words_begin = std::sregex_iterator(
s.begin(), s.end(), words_regex);
auto words_end = std::sregex_iterator();
return std::distance(words_begin, words_end);
}
Example usage:
std::cout << countMatchInRegex("Harry Botter - The robot who lived.", "[^\\s]+");
Output:
7
Upvotes: 6
Reputation: 355079
You can use regex_iterator
to generate all of the matches, then use distance
to count them:
std::regex const expression("[^\\s]+");
std::string const text("Harry Botter - The robot who lived.");
std::ptrdiff_t const match_count(std::distance(
std::sregex_iterator(text.begin(), text.end(), expression),
std::sregex_iterator()));
std::cout << match_count << std::endl;
Upvotes: 22