std c ++中的正则表达式

AYM*_*ADA 2 c++ regex

我想找到所有类似"{some text}"的内容.

我的代码是:

std::wregex e(L"(\\{([a-z]+)\\})");
    std::wsmatch m;


    std::regex_search(chatMessage, m, e);
    std::wcout << "matches for '" << chatMessage << "'\n";
    for (size_t i = 0; i < m.size(); ++i) {
        std::wssub_match sub_match = m[i];
        std::wstring sub_match_str = sub_match.str();
        std::wcout << i << ": " << sub_match_str << '\n';
    }  
Run Code Online (Sandbox Code Playgroud)

但对于像这样的字符串:L"Roses {aaa} {bbb}是{ccc} #ff0000")我的输出是:

0: {aaa}
1: {aaa}
2: aaa
Run Code Online (Sandbox Code Playgroud)

我不会得到下一个子串.我怀疑我的正则表达式有问题.你们有谁看到了什么问题?

Duk*_*ing 5

您正在搜索一次并简单地循环遍历这些组.您需要多次搜索并仅返回正确的组.尝试:

std::wregex e(L"(\\{([a-z]+)\\})");
std::wsmatch m;

std::wcout << "matches for '" << chatMessage << "'\n";
while (std::regex_search(chatMessage, m, e))
{
    std::wssub_match sub_match = m[2];
    std::wstring sub_match_str = sub_match.str();
    std::wcout << sub_match_str << '\n';
    chatMessage = m.suffix().str(); // this advances the position in the string
}
Run Code Online (Sandbox Code Playgroud)

2这是第二组,即括号中的第二组,即([a-z]+).

有关组的更多信息,请参阅