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_matchpentru a căuta ceva în interiorul unui text mai lung: răspunsul estefalse, pentru că trebuie să se potrivească tot textul. Pentru căutare foloseșteregex_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.