可选搜索和正则表达式

Optional search with regular expression

本文关键字:正则表达式 搜索      更新时间:2023-10-16

我有一个字符串" Mindate = 2013-12-01T08:00:00 Z& maxdate = 2014-01-01-01T12:00:00 Z"因此,我需要输出最小日期和最大日期。我使用的正则是" 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`

现在,问题是"注意"或" 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:00:00 Z'和第2组为'2014-01-01-012:00: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 演示

输出:

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字母,数字或/和: