정규식이 "start :(?: ([0-9] {1,2})? ([0-9]. *)"라고 가정 해 봅시다.boost :: spirit :: qi 파서를 작성하는 방법 '을 수행 하시겠습니까?' 정규식에서 무엇입니까?
이
std::string string1 = "start: 01 0ab";
및
std::string string2 = "start: 0ab";
우리는 또한 각각이 일치하는 문자열을 얻을 수 있습니다 일치합니다.
string2를 구문 분석하기 위해 boost :: spirit :: qi 구문 분석기를 사용하려고했지만 일치하지 않습니다.
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의 의미를 확인하는 모습 미리 연산자를 사용할 수 있지만 정규식 연산자를 구현하는 더 일반적인 접근 방식이 '?' ? 감사!