用std :: regex按点解析数字

时间:2017-05-08 10:34:26

标签: c++ regex parsing

我正在尝试解析用点分隔的数字,并将每个数字作为sepate字符串。那是我的示例程序:

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

int main(int argc, char* argv[])
{
    try
    {
        std::string data("123.321.456.654");
        std::regex reg(R"(([0-9]+)\.(\1)\.(\1)\.(\1))");
        std::smatch m;
        if (std::regex_match(data, m, reg))
        {
            std::cout << m.size() << std::endl;
            //std::cout << m[0].str() << std::endl;
            std::cout << m[1].str() << std::endl;
            std::cout << m[2].str() << std::endl;
            std::cout << m[3].str() << std::endl;
            std::cout << m[4].str() << std::endl;
        }
    }
    catch (const std::exception& e)
    {
        std::cerr << "Error occurred: " << e.what() << std::endl;
    }

    return EXIT_SUCCESS;
}

在这个示例中,我使用了三个正则表达式:

工作的:

std::regex reg(R"((\d+)\.(\d+)\.(\d+)\.(\d+))");

工作的:

std::regex reg(R"(([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+))");

根本不起作用:

std::regex reg(R"(([0-9]+)\.(\1)\.(\1)\.(\1))");

我的问题是为什么上一个正则表达式不起作用以及语法错误在哪里?感谢。

0 个答案:

没有答案