在C++中检索正则表达式搜索

RDi*_*ame 13 c++ regex

您好我是正则表达式的新手,根据我从c ++参考网站的理解,可以获得匹配结果.

我的问题是:如何检索这些结果?smatch和之间有什么区别cmatch?例如,我有一个由日期和时间组成的字符串,这是我写的正则表达式:

"(1[0-2]|0?[1-9])([:][0-5][0-9])?(am|pm)"
Run Code Online (Sandbox Code Playgroud)

现在,当我regex_search使用字符串和上面的表达式时,我可以找到字符串中是否有时间.但是我想将这个时间存储在一个结构中,这样我就可以分开几小时和几分钟.我正在使用Visual Studio 2010 c ++.

Som*_*ude 19

如果您使用eg,std::regex_search那么它会填充std::match_result您可以使用它operator[]来获取匹配的字符串的位置.

编辑:示例程序:

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

void test_regex_search(const std::string& input)
{
    std::regex rgx("((1[0-2])|(0?[1-9])):([0-5][0-9])((am)|(pm))");
    std::smatch match;

    if (std::regex_search(input.begin(), input.end(), match, rgx))
    {
        std::cout << "Match\n";

        //for (auto m : match)
        //  std::cout << "  submatch " << m << '\n';

        std::cout << "match[1] = " << match[1] << '\n';
        std::cout << "match[4] = " << match[4] << '\n';
        std::cout << "match[5] = " << match[5] << '\n';
    }
    else
        std::cout << "No match\n";
}

int main()
{
    const std::string time1 = "9:45pm";
    const std::string time2 = "11:53am";

    test_regex_search(time1);
    test_regex_search(time2);
}
Run Code Online (Sandbox Code Playgroud)

该计划的输出:

Match
match[1] = 9
match[4] = 45
match[5] = pm
Match
match[1] = 11
match[4] = 53
match[5] = am