假设我们有一个正则表达式“start:(?: ([0-9]{1,2}))? ([0-9].*)”。
它会匹配
std::string string1 = "start: 01 0ab";
和
std::string string2 = "start: 0ab";
我们也可以分别得到2个匹配的字符串。
我尝试使用 boost::spirit::qi 解析器来解析 string2 但它无法匹配。
qi::rule<std::string::const_iterator, std::string()> rule1 = qi::repeat(1,2)[qi::digit];
qi::rule<std::string::const_iterator, std::string()> rule2 = qi::digit >> *qi::char_;
std::vector<std::string> attr;
auto it_begin = string2.begin();
auto it_end = string2.end();
if (qi::parse(
it_begin,
it_end,
qi::lit("start:")
>> -(qi::lit(" ") >> rule1)
>> qi::lit(" ") >> rule2
>> qi::eoi,
attr))
std::cout<<"match"<<std::endl;
else
std::cout<<"not match"<<std::endl;
我们当然可以使用前瞻运算符来检查规则 1 后面的内容,但是是否有更通用的方法来实现正则表达式运算符'?? 谢谢!