2011-02-28 83 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