我想找到所有类似"{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)
我不会得到下一个子串.我怀疑我的正则表达式有问题.你们有谁看到了什么问题?
您正在搜索一次并简单地循环遍历这些组.您需要多次搜索并仅返回正确的组.尝试:
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]+).
有关组的更多信息,请参阅此