数日間ハッキングと読書をした後、私はブーストの正規表現エンジンで運がありませんでした。
最後のフィールドが入力に一致するすべての行から最初のフィールドを取得したい。
string input =
"449 a dingo ate my baby THINGn"
"448 a dingo ate my baby THINGn"
"445 a dingo ate my baby BOOGNISHn"
"446 a dingo ate my baby BOOGNISHn"
"447 a dingo ate my baby STUFFn";
「正規表現に次の文字列を指定するとしましょう...
string re = "^([0-9]+).+?boognish$";
boost::regex expression(re,boost::regex::perl | boost:regex::icase);
そして、私の試合を設定します
const int subs[] = { 0, 1 };
boost::sregex_token_iterator it(input.begin(), input.end(), expression, subs);
boost::sregex_token_iterator end;
while ( it != end )
{
fprintf(stderr,"%s|n", it->str().c_str());
*it++;
}
ブーストから得られる出力は次のとおりです。行全体とグループ1の両方の一致を要求したことに注意してください。また、行の終わりが簡単にわかるように「|」も要求しました。
449 a dingo ate my baby THING
448 a dingo ate my baby THING
445 a dingo ate my baby BOOGNISH|
449|
446 a dingo ate my baby BOOGNISH|
446|
445 |が本当に欲しいと446 |ただ、しかしそれは与えているme 449(最初のBOOGNISHに到達するまで)、それから446。
前もって感謝します!
回答:
回答№1は1〜による このアーティカル あなたは合格する必要があります flag match_not_dot_newline
マッチングアルゴリズムに。それはあなたのケースを解決すると思います。