C++ 日期解析实现

标签 c++ regex string validation boost

我目前正在努力将日期解析为程序。

格式可以采用以下形式:

DDMMYYYY
DDMMYY
DDMM

DD/MM/YYYY
DD/MM/YY
DD/MM

除了日期之外,还会包含其他内容,如下所示:

19/12/12 0800 1000

这破坏了我当前使用 boost::date_time 和 tokenizer 的实现。

针对这种情况,最好的建议是什么?我能否有一个更好的实现来实现以下功能:

19 Sep 12  // DD MMM YY

我的想法是以 DDMMYYYY 形式将它们作为字符串返回,以便在程序的其他部分中使用。这是最好的方法还是有更好的建议/替代方案?

*编辑:

决定采用 DDMMYYYY、DDMMYY 和 DDMM 不太可行。只能使用带反斜杠的日期。

输出保持不变,字符串格式为:DDMMYYYY

最佳答案

使用 boost.regex,您可以执行以下操作:

#include <iostream>
#include <boost/regex.hpp>

using namespace std;
using namespace boost;

int main(int argc, char* argv[])
{
    regex re("(\\d{2})\\/(\\d{2})(?:\\/?(\\d{2,4}))?");

    cmatch m;

    regex_search("1234 10/10/2012 4567", m, re);
    cout << m.str(1) + m.str(2) + m.str(3) << endl;
    regex_search("1234 10/10/12 4567", m, re);
    cout << m.str(1) + m.str(2) + m.str(3) << endl;
    regex_search("1234 10/10 4567", m, re);
    cout << m.str(1) + m.str(2) << endl;

    return 0;
}

像这样编译:

g++ --std=c++11 -o test.a test.cpp -I[boost_path] [boost_path]/stage/lib/libboost_regex.a

关于C++ 日期解析实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047817/

相关文章:

c++ - 如何收集多个字符串并将它们输入到数组中

c++ - 删除链表的正确方法

mysql - MySQL 8中无效的regexp

c++ - 测试C++代码的性能

javascript - 正则表达式排除包裹在特定 bbcode 标签中的匹配项

Python正则表达式;为什么搜索和匹配似乎在数字字符串中找到字母字符?

python - 按字符串中的数字对字符串列表进行排序?

java - 在数组索引处查找字符串? java

c++ - 在 COM 中调用 QueryInterface() 是绝对必要的吗?

c++ - 对称访客模式