简单说一下自己的理解,就谈一下这个重载版本吧:函数如下
bool regex_search (const basic_string<charT,ST,SA>& s,
match_results<typename basic_string<charT,ST,SA>::const_iterator,Alloc>& m,
const basic_regex<charT,traits>& rgx,
regex_constants::match_flag_type flags = regex_constants::match_default);
s是目标字符串,m是存储匹配结果的容器,rgx是匹配模式,这里主要说一下在一个目标序列中有多个匹配结果的情况,因为每一次执行regex_search后m只能存储第一个匹配结果,如下代码:
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::string s("this subject has a submarine as a subsequence");
std::smatch m;
std::regex e("\\b(sub)([^ ]*)"); // matches words beginning by "sub"
while (std::regex_search(s, m, e))
{
for (auto x : m) std::cout << x << " ";
std::cout << std::endl;
s = m.suffix().str();
}
return 0;
}
会存在三个匹配项,即subject、 submarine 、 subsequence,每一次执行完regex_search后m存储匹配项、匹配项中的每一个分组,比如第一次匹配完,m[0]为subject,m[1]为sub,m[2]为ject,此外还存储了一个前缀(在s中,匹配项subject之前的字符串(“this ”))和一个后缀(在s中,匹配项subject之后的字符串(“ has a submarine as a subsequence”)),所以,在匹配完subject后,必须在后缀中在此执行regex_search,以匹配submarine,所以我们需要自己更新s为m的后缀m.suffix(),如此,对于上面的代码就好理解多啦。