std::match_results::empty() (header <regex>) kiểm tra xem kết quả khớp regex có rỗng hay không (tức là không tìm thấy match nào).
Cú pháp
bool empty() const;
Giá trị trả về
true: Không có match (regex_match/search thất bại).false: Có match (ít nhất group 0 khớp).
Ví dụ: Kiểm tra regex khớp hay không
#include <bits/stdc++.h>
using namespace std;
int main() {
string str = "Tutorials";
regex R1("Points.*"); // Không khớp
regex R2("Tutorials.*"); // Khớp
smatch Mat1, Mat2;
regex_match(str, Mat1, R1);
regex_match(str, Mat2, R2);
if (Mat1.empty()) {
cout << "Regex-1: KHÔNG khớp\n";
} else {
cout << "Regex-1: Khớp\n";
}
if (Mat2.empty()) {
cout << "Regex-2: KHÔNG khớp\n";
} else {
cout << "Regex-2: Khớp\n";
}
return 0;
}
Đầu ra
Regex-1: KHÔNG khớp Regex-2: Khớp
So sánh empty() vs size() == 0
Tương đương logic, nhưng empty():
- Rõ ràng hơn về mặt ngữ nghĩa.
- Là idiom chuẩn C++ cho container-like object.
- Không yêu cầu tính toán size() (dù size() cũng O(1)).
Quy trình khớp regex thông thường
smatch m;
if (regex_search(str, m, pattern)) {
// m.empty() == false
// Xử lý m[0], m[1]...
} else {
// m.empty() == true
// Không có match
}
Lưu ý
match_resultsđược default-construct ở trạng thái rỗng (empty() == true).- Sau
regex_match/searchthất bại, object vẫn ở trạng thái rỗng. - Không có
clear()để reset - chỉ cần gán object mới hoặc default-construct lại.