2

正規表現を使用して4桁のグループを抽出する方法を見つけようとしています

私が今使っている正規表現:

regex_time : "(([01][0-9]|2[0-3])[0-5][0-9])";

コードサンプル:

regex expressionFormat(REGEX_TIME);
boost::match_results<std::string::const_iterator> what;

if (boost::regex_search(input,what,expressionFormat))

私の入力は通常、次の形式になります

"0000 1800 2359"

そして、比較を行うためにそれらをベクトルにプッシュしたいと思います。

行から文字列形式で時間を解析するためのものです。

4

1 に答える 1

0

forwhileの代わりにループを使用する必要があります。ifregex_search

string input;
boost::regex regex("(([01][0-9]|2[0-3])[0-5][0-9])");
boost smatch;

while (boost::regex_search(input.start(), input.end(), what, regex)) {
    // what[0] contains current full match
    // what[2] contains the hours
}

各ループはwhat次の値に移動することに注意してください。ブースト ドキュメント ページの例を参照してください: http://www.boost.org/doc/libs/1_42_0/libs/regex/doc/html/boost_regex/ref/regex_search.html

のインデックスの値はwhat、式のキャプチャ グループによって決定されます。分に合わせて別のグループを作成したい場合は、新しいグループを作成するだけです。

"(([01][0-9]|2[0-3])([0-5][0-9]))"

のグループ インデックスを決定するにはwhat、開き括弧の数を数えます。

于 2012-10-13T03:56:34.423 に答える