Я хочу использовать regex
на реверсе string
.
Я могу сделать следующее, но все мои sub_match
es перевернуты:
string foo("lorem ipsum");
match_results<string::reverse_iterator> sm;
if (regex_match(foo.rbegin(), foo.rend(), sm, regex("(\\w+)\\s+(\\w+)"))) {
cout << sm[1] << ' ' << sm[2] << endl;
}
else {
cout << "bad\n";
}
Я хочу выбраться:
ipsum lorem
Есть ли какое-либо положение для получения необратимых субматч? То есть любое положение, кроме отмены string
s после того, как они совпадают следующим образом:
string first(sm[1]);
string second(sm[2]);
reverse(first.begin(), first.end());
reverse(second.begin(), second.end());
cout << first << ' ' << second << endl;
РЕДАКТИРОВАТЬ:
Это было предложено обновить вопрос, чтобы уточнить, чего я хочу:
Выполнение regex
в обратном направлении на string
не связано с изменением порядка, в котором находятся совпадения. regex
- гораздо более сложный вариант, который было бы полезно опубликовать здесь, но его выполнение в обратном направлении избавляет меня от необходимости смотреть вперед. Этот вопрос об обработке подсовпадений, полученных из match_results<string::reverse_iterator>
. Мне нужно получить их в том виде, в котором они были на входе, здесь foo
. Я не хочу создавать временный string
и запускать на нем reverse
для каждого под-соответствия. Как мне этого избежать?
regex
на обратной стороне строки, да. Но я не хочу, чтобы мои совпадения были отменены ... если это возможно. - person Jonathan Mee   schedule 04.08.2015regex
, который значительно сложнее, чем этот пример, но его можно упростить, работая в обратном порядке. Однако созданиеstring
и их реверсирование для каждого под-соответствия кажется ненужным бременем. - person Jonathan Mee   schedule 04.08.2015