这是一个匹配计数器功能:
笔者采用无用代码:这里是性病的等效代码(也助推)
unsigned int count_match(std::string user_string, const std::string& user_pattern){
const std::regex rx(user_pattern);
std::regex_token_iterator<std::string::const_iterator> first(user_string. begin(), user_string.end(), rx ), last;
return std::distance(first, last);
}
与std::regex_search
它可以(也助推):
unsigned int match_count(std::string user_string, const std::string& user_pattern){
unsigned int counter = 0;
std::match_results<std::string::const_iterator> match_result;
std::regex regex(user_pattern);
while(std::regex_search(user_string, match_result, regex)){
user_string = match_result.suffix().str();
++counter;
}
return counter;
}
注:
没有必要使用这一部分:
std::string::const_iterator start, end;
start = tempStr.begin();
end = tempStr.end();
而且
boost::match_results<std::string::const_iterator> what;
可以
boost::smatch what // a typedef of match_results<std::string::const_iterator>
没有必要:
boost::regex_constants::_match_flags flags = boost::match_default;
因为默认情况下regex_search
有这个标志
这样的:
start = what[0].second;
是用于更新迭代,可以是:
match_result.suffix().str();
如果你想看看发生在while循环中使用此代码
:
std::cout << "prefix: '" << what.prefix().str() << '\n';
std::cout << "match : '" << what.str() << '\n';
std::cout << "suffix: '" << what.suffix().str() << '\n';
std::cout << "------------------------------\n";
在旁注中,使用正则表达式是过度的,因为这可能只是做ne使用'std :: string :: find()',这会获得更好的性能。 – zett42