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

您需要使用while循环而不是iffor 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,请向前计算开括号的数量。

于 2012-10-13T03:56:34.423 回答