理解c++STL regex_research()

来源:互联网 发布:做淘宝客服工资怎么样 编辑:程序博客网 时间:2024/06/06 07:33

简单说一下自己的理解,就谈一下这个重载版本吧:函数如下

 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(),如此,对于上面的代码就好理解多啦。

原创粉丝点击