正则表达式不包括行开头的任何字符,只有注释

时间:2016-02-13 16:51:46

标签: c++ regex

我正在尝试使用正则表达式从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;
            }

        }
    }
}

我的问题是当前正则表达式将最后一行计为注释,例如(其他一些代码//评论),但我不想!

有没有办法修改我的正则表达式,以便它会忽略任何不以评论(///* .. */)开头的代码行?

2 个答案:

答案 0 :(得分:0)

将您的正则表达式修改为std::regex single_regex("(^//.*)");,以便在行首

中搜索"//"

答案 1 :(得分:0)

要仅在行的开头找到注释,您可以使用^。