std::regex_match în C++

Verifică dacă tot textul se potrivește cu modelul; std::smatch păstrează grupurile capturate.

Sintaxă
#include <regex>
bool regex_match(const std::string& text, const std::regex& re);
bool regex_match(const std::string& text, std::smatch& rezultat, const std::regex& re);

Ce face std::regex_match

std::regex_match returnează true doar dacă întregul text se potrivește cu modelul, de la primul la ultimul caracter. Este potrivit pentru validări: cod poștal, număr de telefon, dată.

Cu un std::smatch ca al doilea argument, afli și bucățile prinse de grupurile din paranteze: m[0] este toată potrivirea, m[1] primul grup, m[2] al doilea etc. m[i].str() dă textul, iar m.size() numărul de grupuri plus unu.

std::smatch ține referințe în textul original, așa că textul trebuie să existe cât timp folosești rezultatul.

Parametri

Parametru Descriere
text Textul verificat.
rezultat Opțional: un std::smatch în care se pun grupurile.
re Expresia regulată.

Ce returnează

true dacă tot textul se potrivește.

Exemple

Exemplul 1: Validarea unui număr de telefon

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

int main() {
    const std::regex telefon(R"(07\d{8})");
    for (std::string t : {"0740123456", "0740 123 456", "074012345", "Tel: 0740123456"}) {
        std::cout << t << ": " << (std::regex_match(t, telefon) ? "valid" : "invalid") << '\n';
    }
}

Rezultat

0740123456: valid
0740 123 456: invalid
074012345: invalid
Tel: 0740123456: invalid

Exemplul 2: Extragerea părților unei date cu smatch

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

int main() {
    std::string data = "19.10.2026";
    std::regex model(R"((\d{2})\.(\d{2})\.(\d{4}))");
    std::smatch m;
    if (std::regex_match(data, m, model)) {
        std::cout << "Toată potrivirea: " << m[0] << '\n';
        std::cout << "Zi: " << m[1] << ", lună: " << m[2] << ", an: " << m[3] << '\n';
        std::cout << "Grupuri: " << m.size() - 1 << '\n';
        int an = std::stoi(m[3].str());
        std::cout << "Peste 10 ani: " << an + 10 << '\n';
    }
}

Rezultat

Toată potrivirea: 19.10.2026
Zi: 19, lună: 10, an: 2026
Grupuri: 3
Peste 10 ani: 2036

Greșeli frecvente

  • Folosești regex_match pentru a căuta ceva în interiorul unui text mai lung: răspunsul este false, pentru că trebuie să se potrivească tot textul. Pentru căutare folosește regex_search.
  • Dai un șir temporar împreună cu std::smatch: regex_match(std::string("..."), m, re) nu compilează tocmai pentru că rezultatele ar arăta spre un text distrus.

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::regex_replace: Înlocuiește toate potrivirile unei expresii regulate cu alt text, care poate folosi grupurile $1, $2.