我想搜索一个正则表达式并用一种颜色打印它。我用boost::sregex_token_iterator来做到这一点。这是我的代码

    boost::regex re("ab.");
    string s="";
    string buf;
    string infile("retest.txt");
    //string color="green";
    ifstream in(infile.c_str());
    int lcount=0;
    while (getline(in,buf))
    {
       boost::sregex_token_iterator p(buf.begin(), buf.end(), re, 0);
       boost::sregex_token_iterator end;
       lcount++;
       cout <<"line : "<<lcount<<endl;
       for (;p != end;++p)
       {
           string m(p->first, p->second);
           cout<< m <<endl;
           //cout <<*(p->first)<<endl;
           //cout <<*(p->second)<<endl;
           //unsigned int pos = buf.find(m);
           buf = buf.insert(p->first,"\e[0;32m");
           buf = buf.insert(p->second+m.length()+7,"\e[0m");
       }
       cout<<"\n";
       s.append(buf);
       s.append("\n");
     }
   in.close();
   cout <<"s is:  "<<s<<endl;
    return 0;
  }

但我得到这个错误:



我知道p->first的类型不是insert函数接受的类型。但我不知道如何将它们彼此转换。

最佳答案

问题可能是您对 std::string::insert 的使用情况。在众多重载中,我看不到insert(iterator,string)版本。

您可能希望通过显式说明char数组的长度来调用所需版本:

void insert (iterator p, size_t n, char c)

关于c++ - 使用boost::sregex_token_iterator时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14869863/

10-11 16:52