找不到c ++正则表达式搜索模式

时间:2014-10-14 10:03:55

标签: 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();
}

但令我惊讶的是,它根本找不到任何我无法理解的东西。我会理解,如果正则表达式匹配整个字符串,因为.*是贪婪的,但什么都没有?我在这里做错了什么?

要清楚 - 我知道正则表达式不适合解析但是我不会处理更多级别的括号嵌套,因此我发现正则表达式的使用已经足够了。

2 个答案:

答案 0 :(得分:1)

如果你想使用基本的posix语法,你的正则表达式应该是

{\\(.*\\)}

如果你想使用默认的ECMAScript,你的正则表达式应该是

\\{(.*)\\}

使用clang和libc ++或gcc 4.9+(因为只有它完全支持正则表达式)你的代码给出:

Initiating search...
{trol,asdfsad},{safsa, aaaaa,aaaaadfs} trol,asdfsad},{safsa, aaaaa,aaaaadfs 

Live example on coliru

答案 1 :(得分:0)

最终结果是gcc版本确实存在问题所以我终于使用boost :: regex库并使用以下代码:

std::string str("{trol,asdfsad},{safsa,aaaaa,aaaaadfs}");
boost::regex rex("\\{(.*?)\\}", boost::regex_constants::perl);
boost::smatch result;

while (boost::regex_search(str, result, rex)) {
    for (uint i = 0; i < result.size(); ++i) {
        std::cout << result[i] << " ";
    }
    std::cout << std::endl;
    str = result.suffix().str();
}