std::regex r("((.)(.))(.)");
Выполнение этого задания на трехбуквенной строке просто вернет 5 совпадений. Coliru.Как получить иерархию совпадений из регулярного выражения
Вместо этого я хотел бы получить два совпадения «toplevel», где первое совпадение содержит две подматрицы. Я хотел бы иметь возможность вложить их на любую глубину и получить подходящее дерево матчей.
Похоже, что boost имеет что-то подобное с "nested matches". Это верно? И могу ли я сделать это в C++ 11 без повышения?
Extra: чуть менее тривиальная игрушка пример, где это может быть полезно:
((,[0-9]+)+)((,[a-z])+)
Это соответствует ряду чисел, следуя за серией слов, все через запятую. Я хотел бы отделить число-матчи от слова-матчей, вместо того, чтобы иметь плоскую серию матчей.
Для чего? Как вы полагаете, что сможете сделать это с таким объектом, с которым вы не можете обойтись? –
@IgorTandetnik, я только что добавил немного более сложный пример, чтобы мотивировать это. –
Вы, кажется, полагаете, что получите отдельное соответствие для каждого повторения группы. Это не работает 'std :: regex'. Вы получите ровно столько совпадений, что в регулярном выражении есть открытые парсеры, плюс один. Другими словами, количество возвращаемых совпадений фиксируется синтаксисом выражения и не зависит от сопоставления ввода. –