C++ 在C+中使用正则迭代器的确切方法是什么+;?

C++ 在C+中使用正则迭代器的确切方法是什么+;?,c++,regex,C++,Regex,我一直在寻找一种计算字符串中特定类型的子字符串数量的好方法,比如,我想计算字符串“smstyuisms”中出现的“sms”。我在一个论坛上找到了答案,有人建议使用regex_迭代器。但是,当我尝试以下方法时: string in = "smstyuismssms"; cout << distance(regex_iterator(in.begin(), in.end(), regex("sms")),regex_iterator()) << "\n"; string i

我一直在寻找一种计算字符串中特定类型的子字符串数量的好方法,比如,我想计算字符串“smstyuisms”中出现的“sms”。我在一个论坛上找到了答案,有人建议使用regex_迭代器。但是,当我尝试以下方法时:

string in = "smstyuismssms";
cout << distance(regex_iterator(in.begin(), in.end(), regex("sms")),regex_iterator()) << "\n";
string in=“SMSTYUISMSM”;
cout通过查看,似乎std::regex_迭代器是存在四个实例化的模板:

cregex_iterator    regex_iterator<const char*>
wcregex_iterator   regex_iterator<const wchar_t*>
sregex_iterator    regex_iterator<std::string::const_iterator>
wsregex_iterator   regex_iterator<std::wstring::const_iterator>

这很像
std::string
/
std::wstring
,它们都是
std::basic_string
模板的实例化。基本上,您的代码相当于使用basic_string,而不是直接使用string/wstring传递模板参数。

Hi!我第一次尝试时只使用了相同的示例。但sregex_迭代器抛出了一个错误“未定义对正则表达式的引用”。当我搜索这个问题时,我发现我正在使用的编译器(gcc4.8.1)可能不支持这个实例化。所以,然后,我切换到regex_迭代器。@timidgeek,我担心您的编译器可能太旧了。好的。我将更新我的编译器,并询问是否存在任何问题。非常感谢。
auto words_begin = std::sregex_iterator(s.begin(), s.end(), words_regex);