我有一个字符串“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'
最佳答案
您可以将minDate
或maxDate
匹配并捕获到组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(对此值进行检查):min
或max
Date=
-文字字符串Date=
([0-9-]+T[0-9A-Z:]+)
-捕获组2(其值为结果):一个或多个数字或/和-
,然后是T
,然后一个或多个大写ASCII字母,数字或/和:
。