与Boost :: Regex进行最后一场比赛

时间:2011-02-28 11:22:24

标签: c++ regex boost

我在C ++中有一个带有Boost的正则表达式,它匹配多行字符串中的行。正则表达式搜索找到第一个匹配,但我对匹配的最后一行感兴趣。

我现在使用的代码是这样的:

matched = boost::regex_search(input, results, regex);               
if (!matched) {
    return -1; // error code
}
matched_string = results["Group"]; 

如果regex"(?<Group>Data.)"input"Data1 Data2 Data3",则matched_string现为"Data1"。我希望它是"Data3"

1 个答案:

答案 0 :(得分:5)

operator[]的{​​p> match_results会返回sub_matchsub_match继承std::pair个迭代器。 其firstsecond成员对应于匹配范围。 因此,您可以使用其second作为新搜索的起点。 例如:

string  input = "Data1 Data2 Data3";
regex  re("(?<Group>Data.)");
string::const_iterator  begin = input.begin(), end = input.end();
smatch  results;
while ( regex_search( begin, end, results, re ) ) {
  smatch::value_type  r = results["Group"];
  begin = r.second;
}

希望这有帮助。