可选的正则表达式搜索

时间:2018-04-28 20:47:59

标签: c++ regex

我有一个字符串“minDate = 2013-12-01T08:00:00Z& maxDate = 2014-01-01T12:00:00Z” 所以我需要输出中的最小和最大日期。我使用的正则表达式是 “的minDate =(。*?)(?:的maxDate =)(。*)”

我得到了正确的输出:

Full match  `minDate=2013-12-01T08:00:00Z&maxDate=2014-01-01T12:00:00Z`  
Group 1.    `2013-12-01T08:00:00Z;`  
Group 2.    `2014-01-01T12:00:00Z`

现在问题是“minDate”或“maxDate”可以是可选的。意味着输入可以是:

minDate=2013-12-01T08:00:00Z&maxDate=2014-01-01T12:00:00Z

minDate=2013-12-01T08:00:00Z

maxDate=2014-01-01T12:00:00Z

这将是什么样的正则表达式:

首次输入我应该将第1组'2013-12-01T08:00:00Z'和第2组视为'2014-01-01T12:00:00Z' 对于第二次输入我应该得到Group1'2013-12-01T08:00:00Z'
对于第三个输入,我应该得到Group1'2014-01-01T12:00:00Z'

1 个答案:

答案 0 :(得分:1)

您可以将minDatemaxDate匹配并捕获到第1组,将日期时间值匹配到第2组,然后您可以根据需要在程序中分配变量:

std::string maxDate = "";
std::string minDate = "";
std::regex r("(min|max)Date=([0-9-]+T[0-9A-Z:]+)");
std::string s = "minDate=2013-12-01T08:00:00Z&maxDate=2014-01-01T12:00:00Z";
for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
    i != std::sregex_iterator();
    ++i)
{
    std::smatch m = *i;
    if (m[1].str()=="min") {
        minDate = m[2].str();
        std::cout << "Min date: " << minDate << endl;
    } else {
        maxDate = m[2].str();
        std::cout << "Max date: " << maxDate << endl;
    }
}

请参阅C++ demo

输出:

Min date: 2013-12-01T08:00:00Z
Max date: 2014-01-01T12:00:00Z

模式详情

  • (min|max) - 捕获第1组(检查此值):minmax
  • Date= - 文字字符串Date=
  • ([0-9-]+T[0-9A-Z:]+) - 捕获第2组(其值为结果):一个或多个数字或/和-,然后是T,然后是一个或多个大写ASCII字母,数字或/和: