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