как заменить последний совпавший символ в строке последним совпадающим символом и константой - PullRequest
0 голосов
/ 06 августа 2020

У меня есть строка типа

string basestring= "A\B+C+E\FG+\K987+54h\";

Мне нужно заменить все вхождения специального символа тем же специальным символом и.

Результат должен быть:

"A\\B\+C\+E\\FG\+\\K987\+54h\\"

В настоящее время я использую следующий код для получения результата.

regex Reg("[^A-Z0-9]", regex_constants::icase);
string help = regex_replace("A\B+C+E\FG+\K987+54h\", Reg, "\\");

Это заменит все специальные символы на \, Как получить последний появившийся специальный символ?

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Используйте

std::regex Reg("[^A-Z0-9]", std::regex_constants::icase);
std::string help = std::regex_replace(R"(A\B+C+E\FG+\K987+54h\)", Reg, R"(\$&)");

Замена - это backsla sh, за которым следует значение соответствия (обратная ссылка на все совпадение $&).

0 голосов
/ 06 августа 2020

Когда вы выполняете эту замену:

regex_replace("A\B+C+E\FG+\K987+54h\", Reg, "\\");

вы заменяете \\ точно на каждый шаблон, который вы соответствуете.

Чтобы получить желаемый результат, вам нужно подставить в совпавший шаблон вместе с escape-символами, например:

std::regex_replace(R"(A\B+C+E\FG+\K987+54h\)", Reg, "\\$0");
                       // insert \\ before the match ^^^^ 

Также обратите внимание, что входная строка должна экранировать специальные символы или быть записана как литерал необработанной строки.

Вот демо .

...