未找到 C++ 正则表达式搜索模式

标签 c++ regex

下面的例子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 

Live example on coliru

关于未找到 C++ 正则表达式搜索模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26358021/

相关文章:

javascript - 如何使用正则表达式查找javascript变量的值?

c++ - clion 在每个构建上运行 cmake

c++ - 无法使用 g++ 4.6.3 构建我的 c++ 代码

regex - Perl6语法中的<.ident>函数/捕获

javascript - 正则表达式不适用于电话号码字段

正则表达式

c++ - GCC 无法从模板函数中推断出自动返回类型?

c++ - 取消引用具有默认参数的函数 - C++14 与 C++11

c++ - 创建一个带线段的多边形和另一个多边形

c# - 为什么这个正则表达式不能正确匹配?