/ /正規表現キャプチャグループのブースト-C ++、regex、boost、boost-regex

正規表現のキャプチャグループを強化する - c ++、regex、boost、boost-regex

数日間ハッキングと読書をした後、私はブーストの正規表現エンジンで運がありませんでした。

最後のフィールドが入力に一致するすべての行から最初のフィールドを取得したい。

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 マッチングアルゴリズムに。それはあなたのケースを解決すると思います。