- void CleanComment(string& str)
- {
- string& szStr = str;
- string szReg = "('(?:[^\\\\\\\\']|\\\\\\\\.)*'|\\"(?:[^\\\\\\\\\\"]|\\\\\\\\.)*\\")|" //跳过" "/' '部分
- "(?<comment>//[^\\\\n]*|/\\\\*.*?\\\\*/)"; //单行注释,多行注释
- string::const_iterator start = szStr.begin(), end = szStr.end();
- size_t pos,num;
- boost::regex reg(szReg);
- boost::smatch match;
- boost::match_flag_type flags = boost::match_default;
- while(regex_search(start, end, match, reg, flags))
- {
- pos = match[0].first- szStr.begin();
- num = match[0].second-match[0].first;
- if(match["comment"].matched)
- {
- szStr.erase(pos, num);
- // update search position:
- start = szStr.begin() + pos;
- }
- else
- {
- // update search position:
- start = match[0].second;
- }
- end = szStr.end();//重要,此时字符串已经被改变,需要重新获得新的end()
- // update flags:
- if(start != szStr.begin())
- {
- flags |= boost::match_prev_avail;
- flags |= boost::match_not_bob;
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/19112012457.html
来源: http://www.codesnippet.cn/detail/19112012457.html