在一行中提取4位数的子字符串

时间:2012-10-13 03:44:02

标签: regex boost-regex

试图弄清楚如何使用正则表达式提取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"

我想把它们推到一个载体中做一些比较。

用于从一行中以字符串格式解析时间。

1 个答案:

答案 0 :(得分:0)

while需要使用if循环代替regex_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移动到下一个值。请参阅boost doc页面上的示例: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中的组索引,请计算左括号的数量。