首页 > 解决方案 > 正则表达式多次匹配相同的模式

问题描述

我有这样的文本,其中包含一个列表对,每一对都包含一些数据的列表以及该数据与其他数据的连接:

{data={data1,data2},connection=data3}, {{data4},data5}, {{data6},data7}, ...

我需要从每一对中提取数据条目,即我需要data1,data2data3。这是我想出的正则表达式:

(\{(?:\S*=)?\{\S+\})(?:,(?:\S*=)?\}\S+)?

regex101.com将模式与文本匹配并将字符串分成以下组:

{data={data1,data2},connection=data3}, {{data4},data5}, {{data6},data7}(对于每个我都需要运行另一个正则表达式)。但是,我的 C++ 与字符串不匹配:

#include <iostream>
#include <string>
#include <regex>

int main()
{
    std::string text{ "{data={data1,data2},connection=data3}, {{data4},data5}, {{data6},data7}" };

    const std::regex rx{ R"data((\{\S*\{\S+\})(?:,(\S*=)?\}\S+)?)data" };
    std::smatch matches;
    if (std::regex_match(text, matches, rx))
    {
        std::cout << matches.size() << std::endl;
    }

    system("pause");
}

我应该如何在 C++ 中做到这一点?

标签: c++regexc++11pattern-matchingregex-group

解决方案


推荐阅读