Я разрабатываю код для очистки escape-символов из std :: string. Предположим, у меня есть "" Hello, \ "all \" "" в качестве входных данных.
У меня есть следующий список побегов, которые нужно обработать
const std::vector<std::pair<std::regex, std::string>> escape_symbols_to_replace{
{ std::regex("\\\\"), "\\" },
{ std::regex("\\\""), "\"" },
// { std::regex("\\n"), "\n" },
// { std::regex("\\r"), "\r" },
// { std::regex("\\t"), "\t" },
// { std::regex("\\b"), "\b"},
// { std::regex("\\f"), "\f"},
// { std::regex("\\v"), "\v"},
// { std::regex("\\'"), "\'"},
// { std::regex("\\?"), "\?"}
};
void ProcessEscapes(std::string& string_content)
{
for (const auto& [expr, subs] : escape_symbols_to_replace) {
string_content = std::regex_replace(string_content, expr, subs);
}
}
А вот что у меня:
After processing = Hello, \"everybody\"
Must be = Hello, "everybody"
Значит, убираются не все уцелевшие. Я что-то делаю неправильно, применяя к строке набор reg_expr?





Уже обработанные последовательности не следует повторно обрабатывать несколько раз.