ノイズの多い入力を解析しようとしています。理想的には、スタンザがルールに一致するかどうかを確認し、必要なデータを取得して残りを破棄することができます。
欲しいデータは以下の通りです。
Event: Newstate
Channel: SIP/104-000001bb
ChannelState: 6
ChannelStateDesc: Up
イベントが新しい状態の場合に確認したい。
そして、チャンネルの状態が必要です。残りは(まだ)気にしないので、無視したいです。柔軟性があり、重要なものの間の古いがらくたを受け入れたいです。本当に、この行を無視するとは言いたくありませんが、無視しますイベントと、値をキャプチャするチャネル状態の終わりの間のすべて。
これまでのところ、私は持っています:
typedef boost::fusion::vector2<std::string, std::string> vect;
qi::rule<std::string::iterator, vect(), space> rule_ =
lit("Event: ") >> *char_("a-zA-Z") >>
qi::omit[ *char_ ] >>
"ChannelState: " >> *char_("0-9") >>
qi::omit[ *char_ ];
しかし、これは何らかの理由で機能しません。これを行うと、常に false が返されます。
vect v;
bool r=qi::parse(it, str.end(), rule_, v);
編集: ブースト バージョン 1.42 コンパイラ g++ 4.4 スピリット 0x2020