下面的例子here我写了以下代码:
using namespace std::regex_constants;
std::string str("{trol,asdfsad},{safsa, aaaaa,aaaaadfs}");
std::smatch m;
std::regex r("\\{(.*)\\}"); // matches anything between {}
std::cout << "Initiating search..." << std::endl;
while (std::regex_search(str, m, r)) {
for (auto x : m) {
std::cout << x << " ";
}
std::cout << std::endl;
str = m.suffix().str();
}
但令我惊讶的是,它没有发现任何我无法理解的内容。我会理解正则表达式是否匹配整个字符串,因为 .*
是贪婪的但什么都没有?我在这里做错了什么?
明确一点 - 我知道正则表达式不适合解析,但我不会处理更多级别的括号嵌套,因此我发现使用正则表达式已经足够好了。
最佳答案
如果你想使用基本的 posix 语法,你的正则表达式应该是
{\\(.*\\)}
如果你想使用默认的 ECMAScript,你的正则表达式应该是
\\{(.*)\\}
使用 clang 和 libc++ 或使用 gcc 4.9+(因为只有它完全支持正则表达式)你的代码给出:
Initiating search...
{trol,asdfsad},{safsa, aaaaa,aaaaadfs} trol,asdfsad},{safsa, aaaaa,aaaaadfs
关于未找到 C++ 正则表达式搜索模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26358021/