这是我的代码
firstOrDefault
我的test.txt包含以下数据
std::ifstream ifs("f:/test.txt");
std::string line;
//In header in my code
static std::vector<unsigned long long> v_BF_Char;
static std::vector<unsigned long long> v_Begin_BF_Range;
static std::multimap<uintmax_t, std::string> m_BF_Char;
//qi::int_parser<uintmax_t, 16> hex_int;
static qi::uint_parser<unsigned long long, 16, 2, -1> hex_int;
while (std::getline(ifs, line))
{
typedef std::string::const_iterator It;
It begin = line.begin(), end = line.end();
// rule for grammer
// qi::rule<It, unsigned long long()> braced_hex = '<' >> hex_int >> '>';
qi::rule<It, uintmax_t()> braced_hex2 = '<' >> hex_int >> '>';
qi::rule<It, std::vector<unsigned long long>()> braced_hex = '<' >> qi::repeat(1,2)[hex_int] >> '>';
qi::rule<It, std::vector<unsigned long long>()> braced_hex1 = '[' >> qi::repeat(1,2)[hex_int] >> ']';
bool beginbfrange_check = qi::phrase_parse(begin, end, *braced_hex >> *braced_hex1 , qi::space, v_Begin_BF_Range);
}
我想解析&lt; 005d&gt; &LT; 00a6&GT;并[d 0063&GT; &LT; 007C&GT; &LT; 0064&GT; &lt; 007e&gt;] 这一行是我文本文件的第一行。
我正在解析它
<005d> <00a6> [<0063> <007c> <0064> <007e>]
<51dc> <04001C0180000000000000000EE317BC>
<05001C0180000000> <04001C0180000000000000000EE317BC>
<51dc> <30ea30f330ae30c330c8>
<0000> <fffd>
<003d> <00a5>
<05001C0180000000> <04001C0180000000000000000EE317BC>
<005d> <00a6>
<005e> <007d>
<005f> <0303>
<0060> <2019>
哪个工作正常,但我想使用我的优化规则,当我使用它时
qi::rule<It, uintmax_t()> braced_hex2 = '<' >> hex_int >> '>';
bool beginbfrange_check = qi::phrase_parse(begin, end, *braced_hex2 >> *('[' >> *braced_hex2 >> ']') , qi::space, v_Begin_BF_Range);
它可以工作,但矢量只存储 005d和00a6 值而不存储其余值 矢量中的值应 005d 00a6 0063 007c 0064&gt; 007E
**问题在于其他QI规则**