c ++正则表达式日期搜索?

时间:2015-09-08 16:57:55

标签: regex

遵循匹配日期格式的正确方法:yyyy-mm-dd

std::regex e("\\d{4}[-]\\d{2}[-]\\d{2}");

寒冷的日期在括号内,即(yyyy-mm-dd)

1 个答案:

答案 0 :(得分:0)

我使用单词边界\b(为了不将1022015-12-233333等字符串中的“日期”与您的正则表达式匹配),然后使用strptime验证日期:

\\b\\d{4}[-]\\d{2}[-]\\d{2}\\b

这是IDEONE demo

#include <regex>
#include <string>
#include <iostream>
#include <time.h>
using namespace std;

int main()
{
    struct tm tm;
    time_t t;
        string data("On 2015-12-23, the shop will be closed, but on 2016-01-03, it will be open. Invalid date: 2016-13-32. ID: 1022015-12-233333.");
        std::regex pattern("\\b\\d{4}[-]\\d{2}[-]\\d{2}\\b");
        std::smatch result;

        while (regex_search(data, result, pattern)) {
            if (strptime(result[0].str().c_str(), "%Y-%m-%d", &tm) != NULL) {
              std::cout << result[0] << std::endl;
            }
            data = result.suffix().str();
        }
}