Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

match_results::empty() trong C++ STL

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/search thấ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.