C ++正则表达式搜索多行注释(在/ * * /之间)

时间:2013-01-16 14:31:02

标签: c++ regex

我正在尝试实现简单的案例(基本上在两个标签之间查找文本,无论它们是什么)。 我想获得行

/ *我的评论1 * /

/ *我的评论2 * /

/ *我的评论3 * /

作为输出。看来我需要将捕获组限制为1?因为在字符串Hello /* my comment 1 */ world上我得到了我想要的东西 - res [0]包含/ *我的评论1 * /

#include <iostream>
#include <string>
#include <regex>

int main(int argc, const char * argv[])
{
    std::string str = "Hello /* my comment 1 */ world /* my comment 2 */ of /* my comment 3 */ cpp";

    std::cmatch res;
    std::regex rx("/\\*(.*)\\*/");

    std::regex_search(str.c_str(), res, rx);

    for (int i = 0; i < sizeof(res) / sizeof(res[0]); i++) {
        std::cout << res[i] << std::endl;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:10)

通过将量词*/转换为non-greedy版本,使正则表达式仅匹配*第一个次出现。这是通过在其后添加问号来实现的:

std::regex rx("/\\*(.*?)\\*/");