2

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

/* 我的评论 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;
}
4

1 回答 1

12

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

std::regex rx("/\\*(.*?)\\*/");
于 2013-01-16T14:34:31.977 回答