c++ - 如何使用 Regex 分隔此字符串

标签 c++ regex string

对于这个字符串[268, 950][268, 954][269, 955][272, 955][270, 955][268, 953]

我想逐对获取 [ , ] 中的数字。

我使用 C++ regex_search 来解析这个字符串。

这是我的测试代码:

ifstream  file("output.txt");

char regex_base[] = "[\\[0-9, 0-9\\]]{10}";
char regex_num[] = "[0-9]{3}";

regex reg_base(regex_base, regex_constants::icase);
regex reg_num(regex_base, regex_constants::icase);

if (file.is_open())
{
    string s;
    while (!file.eof()){
        getline(file, s);
        smatch m;
        while (regex_search(s, m, reg_num)) {
            for (int i = 0; i < m.size(); i++)
                cout << m[i] << endl;
        }
    }
}

但是在 regex_search()while 中,变量 m 只得到 [268, 950] 并且它形成了一个无限循环.

我的正则表达式或我的代码有什么问题?

最佳答案

我已经删除了捕获组,因为你似乎根本没有使用它们,并添加了一些代码来展示如何从你的输入字符串中获取匹配项:

char regex_base[] = "\\[[0-9]+, [0-9]+\\]";
...
s = "[268, 950][268, 954][269, 955][272, 955][270, 955][268, 953]"; // FOR TEST
smatch m;
while (regex_search(s, m, reg_num)) 
{
    for (auto x:m) std::cout << x << "\r\n";
    s = m.suffix().str();
}

输出:

enter image description here

如果您需要这些值,可以使用不同的正则表达式:

char regex_base[] = "\\[([0-9]+), ([0-9]+)\\]";
...
s = "[268, 950][268, 954][269, 955][272, 955][270, 955][268, 953]";
smatch m;
while (regex_search(s, m, reg_num)) 
{
    std::cout << m[1] << ", " << m[2] << std::endl;
    s = m.suffix().str();
}

enter image description here

关于c++ - 如何使用 Regex 分隔此字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29671277/

相关文章:

c++ - Qt错误:expected primary-expression before ')' token

c++ - 在远程 PC 上进行性能分析

ios - Double\\in 正则表达式 iOS

c++ - 将指针解释为二维数组

测试可被 7 整除/倍数的 C++ 程序

正则表达式匹配 sed 中的非 ASCII 字符

regex - 如何使用 smartmatch 检查字符串是否与数组中的所有模式匹配?

c - 从不兼容的指针类型传递 ‘search_and_count’ 的参数 2 [默认启用]

ruby - YAML:解析带有转义双引号的字符串时出错

c++ - 在 C++ 中调整字符串大小是危险的