Я использую 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
Замена содержимого групп захвата в регулярном выражении С++ ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1731157816
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79170117/replacing-content-of-capture-groups-in-a-c-regex[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия