我正在尝试使用正则表达式从C ++源文件中删除任何注释。
以下是代码示例:
std::regex single_regex("(//.*)");
std::regex multi_regex("/\\*.*?");
std::regex multi_close_regex("\\*/");
以下是示例代码:
/* multi line
comment
*/
//single line comment
some code
//another single line comment
some other code //comment
这是我进行迭代的代码:
void CommentStrip::GetLines(const std::string &line, size_t &single_comm, size_t &multi_comm, const std::string &language, bool &flag)
{
if (language == "C" || language == "C++" || language == "C/C++ Header") {
std::regex single_regex("(//.*)");
std::regex multi_regex("/\\*.*?");
std::regex multi_close_regex("\\*/");
std::string tmp_line;
if (!line.empty()) {
if (std::regex_search(line,single_regex))
single_comm++;
if(std::regex_search(line,multi_regex))
flag = true;
if(flag)
multi_comm++;
if(std::regex_search(line, multi_close_regex) && flag == true)
flag = false;
}
}
}
}
我的问题是当前正则表达式将最后一行计为注释,例如(其他一些代码//
评论),但我不想!
有没有办法修改我的正则表达式,以便它会忽略任何不以评论(//
或/* .. */
)开头的代码行?
答案 0 :(得分:0)
将您的正则表达式修改为std::regex single_regex("(^//.*)");
,以便在行首
"//"
答案 1 :(得分:0)
要仅在行的开头找到注释,您可以使用^。