Замена содержимого групп захвата в регулярном выражении С++C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Замена содержимого групп захвата в регулярном выражении С++

Сообщение Anonymous »

Я использую C++20 (Visual Studio 2022) с std::regex (хотя недавно мне пришлось переключиться на boost::regex, чтобы получить нерекурсивную реализацию из-за подобных проблем). >
У меня есть длинное регулярное выражение с несколькими группами захвата. Вот сильно упрощенный пример:
string s("123 hello 456 a,b,c 789 1:2:3");
regex r(R"regex(\d+ (\w+) \d+ ([\w,]+) \d+ ([\w:]+))regex");
smatch m;
regex_match(s, m, r);
// at this point m[1] == "hello", m[2] == "a,b,c", m[3] == "1:2:3"

Я хотел бы изменить и заменить каждую группу захвата, например скажем, я хотел перевернуть каждый из них, чтобы сгенерировать эту строку:
"123 olleh 456 c,b,a 789 3:2:1"

Как рекомендуется это сделать? В идеале я бы хотел сделать это таким образом, чтобы его поддерживали как std::regex, так и boost::regex. Если это значительно упрощает ситуацию, то в этом конкретном случае мне поможет ответ, специфичный для повышения.
Обратите внимание, что существует множество примеров сопоставления одного шаблона регулярного выражения несколько раз, и каждый время вы можете изменить соответствующий текст и заменить его измененным текстом. Мой случай другой: у меня есть одно длинное регулярное выражение с несколькими группами захвата внутри него. Я хотел бы применить разную логику к каждой группе захвата, чтобы вычислить ее замену.
Также обратите внимание, что логика не является функцией каждой группы захвата независимо. Итак, я хотел бы сделать что-то вроде этого (продолжая приведенный выше код):
// at this point m[1] == "hello", m[2] == "a,b,c", m[3] == "1:2:3"
string s1 = m[1], s2 = m[2], s3 = m[3];
compute_replacements(s1, s2, s3); // s1,s2,s3 are modified by this function

string result = this_question_is_about_what_to_put_here(s, r, s1, s2, s3);
// result == original string with each capture group replaced by s1, s2, s3 respectively


Подробнее здесь: https://stackoverflow.com/questions/791 ... -a-c-regex
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»