qi::alnumは、アルファベットと10進数文字にマッチするパーサーです。
#include <iostream> #include <string> #include <boost/optional.hpp> #include <boost/spirit/include/qi.hpp> namespace qi = boost::spirit::qi; template <class R, class Expr> boost::optional<R> parse(const std::string& input, const Expr& expr) { R result; typename std::string::const_iterator it = input.begin(); if (!qi::parse(it, input.end(), expr, result)) { return boost::none; } return result; } int main() { assert(parse<char>("a", qi::alnum) == 'a'); assert(parse<char>("b", qi::alnum) == 'b'); assert(parse<char>("c", qi::alnum) == 'c'); assert(parse<char>("x", qi::alnum) == 'x'); assert(parse<char>("A", qi::alnum) == 'A'); assert(parse<char>("B", qi::alnum) == 'B'); assert(parse<char>("C", qi::alnum) == 'C'); assert(parse<char>("X", qi::alnum) == 'X'); assert(parse<char>("1", qi::alnum) == '1'); assert(parse<char>("2", qi::alnum) == '2'); assert(parse<char>("3", qi::alnum) == '3'); // アルファベットと10進数以外にはマッチしない assert(parse<char>("@", qi::alnum) == boost::none); }