Получить последний матч с Boost :: Regex - PullRequest
5 голосов
/ 28 февраля 2011

У меня есть регулярное выражение в 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 Ответ

5 голосов
/ 28 февраля 2011

operator[] из match_results возвращает sub_match.sub_match наследует std::pair итераторов.Его элементы first и second соответствуют согласованному диапазону.Таким образом, вы можете использовать его 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;
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...