std::regex_replace în C++

Înlocuiește toate potrivirile unei expresii regulate cu alt text, care poate folosi grupurile $1, $2.

Sintaxă
#include <regex>
std::string regex_replace(const std::string& text, const std::regex& re, const std::string& inlocuire);

Ce face std::regex_replace

std::regex_replace returnează un șir nou în care fiecare porțiune potrivită cu modelul este înlocuită. Textul original nu se schimbă.

În textul de înlocuire, $1, $2 etc. înseamnă grupurile capturate, iar $& toată potrivirea. Așa poți reordona bucăți: o dată 19.10.2026 devine 2026-10-19. Cu opțiunea std::regex_constants::format_first_only se înlocuiește doar prima potrivire.

Parametri

Parametru Descriere
text Textul original.
re Expresia regulată.
inlocuire Textul nou; poate conține $1, $2, $&.

Ce returnează

Un std::string nou, cu înlocuirile făcute.

Exemple

Exemplul 1: Spații multiple și cifre ascunse

#include <iostream>
#include <regex>
#include <string>

int main() {
    std::string text = "Ana    are   mere.";
    std::cout << std::regex_replace(text, std::regex(R"(\s+)"), " ") << '\n';

    std::string card = "Card: 4111 1111 1111 1234";
    std::cout << std::regex_replace(card, std::regex(R"(\d{4} )"), "**** ") << '\n';
}

Rezultat

Ana are mere.
Card: **** **** **** 1234

Exemplul 2: Reordonarea unei date cu grupuri

#include <iostream>
#include <regex>
#include <string>

int main() {
    std::string jurnal = "Livrat 19.10.2026, retur 02.11.2026";
    std::regex data(R"((\d{2})\.(\d{2})\.(\d{4}))");
    std::cout << std::regex_replace(jurnal, data, "$3-$2-$1") << '\n';
    std::cout << std::regex_replace(jurnal, data, "[$&]") << '\n';
}

Rezultat

Livrat 2026-10-19, retur 2026-11-02
Livrat [19.10.2026], retur [02.11.2026]

Exemplul 3: Doar prima potrivire

#include <iostream>
#include <regex>
#include <string>

int main() {
    std::string s = "eroare, eroare, eroare";
    std::cout << std::regex_replace(s, std::regex("eroare"), "OK",
                                    std::regex_constants::format_first_only) << '\n';
}

Rezultat

OK, eroare, eroare

Greșeli frecvente

  • Vrei un $ literal în textul de înlocuire (de exemplu un preț în dolari) și scrii doar $: dacă urmează o cifră, este interpretat ca grup. Scrie $$.
  • Folosești regex_replace pentru o înlocuire simplă de text fix într-o buclă mare: e mult mai lent decât find + replace.

Comenzi înrudite

  • std::regex: O expresie regulată compilată, folosită pentru verificarea, căutarea și înlocuirea textului.
  • std::regex_search: Caută prima porțiune din text care se potrivește cu modelul, oriunde în text.
  • std::string::replace: Înlocuiește porțiunea de n caractere de la poziția poz cu alt text.