2011-02-28 50 views
5

我在C++中使用Boost的正则表达式来匹配多行字符串中的行。正则表达式搜索找到第一个匹配,但是我对匹配的最后一行感兴趣。用Boost :: Regex获取最后一场比赛

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

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"

回答

5

operator[] of 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; 
} 

希望这会有所帮助。

+1

使用'smatch :: const_reference r = results [“Group”]'应该避免一些不必要的复制。 – maxschlepzig 2012-03-21 08:32:19