我想搜索一个正则表达式并用一种颜色打印它。我用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/