使用 spirit 解析日期时间字符串
一个演示如何使用 boost spirit 框架解析日期的示例
引言
本文包含一个示例,展示如何使用 Boost Spirit 框架解析类似“1999-01-20T00:01:22”的日期时间字符串。
背景
XML 模式定义日期时间格式如下:“2000-01-30T00:10:20+1”。
使用代码
首先创建你的解析器
struct myparser: public grammar<myparser> { template <typename ScannerT> struct definition { definition(myparser const& self) { first = int_p[assign(self.date_.year_)] >> "-" >> int_p[assign(self.date_.month_)] >> "-" >> int_p[assign(self.date_.day_)] >> "T" >> int_p[assign(self.date_.hour_)] >> ":" >> int_p[assign(self.date_.minute_)] >> ":" >> int_p[assign(self.date_.second_)] ; } rule<ScannerT> first; rule<ScannerT> const& start() const { return first; } }; myparser(date& d):date_(d){}; date& date_; };
然后调用解析器
bool parse_date(char const* str, date& d) { myparser p(d); return parse(str, p).full; }
关注点
这个解析器可以改进以支持更灵活的格式
历史