理解c++STL regex_research()

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值