Get last match with Boost::Regex
boost, c++, regex
Solution
`operator[]` of `match_results` returns a `sub_match`. `sub_match` inherits `std::pair` of iterators. Its `first` and `second` members correspond to matched range. So, you can use its `second` for start point of new search. For example:
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;
}
Hope this helps.
Problem
I have a regular expression in C++ with Boost which matches lines in multi-line strings. Regex search finds the first match, however I'm interested in the last line which matches. The code I'm using now is something like this: ``` matched = boost::regex_search(input, results, regex); if (!matched) { return -1; // error code } matched_string = results["Group"]; ``` If `regex` was `"(?<Group>Data.)"` and `input` was `"Data1 Data2 Data3"`, then `matched_string` is now `"Data1"`. I want it to be `"Data3"`.