我有一个字符串“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'

最佳答案

您可以将minDatemaxDate匹配并捕获到组1中,并将datetime值捕获到组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字母,数字或/和:
  • 09-04 15:33