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

match_results::size() trong C++ STL

std::match_results::size() (header <regex>) trả về số lượng sub-match (capture group) trong kết quả khớp regex, bao gồm cả toàn bộ match (group 0).

Cú pháp

size_type size() const;

Giá trị trả về

  • Số lượng sub-match = số capturing group trong regex + 1 (group 0 là toàn bộ match).
  • Nếu không khớp (match_results rỗng), trả về 0.

Ví dụ 1: Cơ bản

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str = "Tutorials Point";
    regex R("(Tutorials)(.*)"); // 2 capturing groups
    
    smatch Mat;
    regex_match(str, Mat, R);
    
    cout << "Size: " << Mat.size() << '\n'; // 3 (group 0 + 2 groups)
    
    // In từng group
    for (size_t i = 0; i < Mat.size(); ++i) {
        cout << "Group " << i << ": '" << Mat[i] << "'\n";
    }
    return 0;
}

Đầu ra

Size: 3
Group 0: 'Tutorials Point'
Group 1: 'Tutorials'
Group 2: ' Point'

Ví dụ 2: Sử dụng size() để duyệt

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str = "Tutorials Point Tutorials";
    regex R("(Tutorials)(.*)");
    
    smatch Mat;
    regex_match(str, Mat, R);
    
    cout << "Số group: " << Mat.size() << '\n';
    for (size_t i = 0; i < Mat.size(); ++i) {
        cout << "Group " << i << ": độ dài " << Mat.length(i) 
             << ", nội dung: '" << Mat[i] << "'\n";
    }
    return 0;
}

Đầu ra

Số group: 3
Group 0: độ dài 25, nội dung: 'Tutorials Point Tutorials'
Group 1: độ dài 9, nội dung: 'Tutorials'
Group 2: độ dài 16, nội dung: ' Point Tutorials'

Lưu ý quan trọng

  • size() trả về 0 nếu regex_match/search thất bại (match_results rỗng).
  • Luôn kiểm tra !mat.empty() hoặc mat.size() > 0 trước khi truy cập mat[i].
  • Group 0 luôn là toàn bộ chuỗi khớp (nếu khớp thành công).
  • Non-capturing group (?:...) KHÔNG tăng size().

Ví dụ 3: Kiểm tra match thành công

string s = "Hello";
regex r("World");
smatch m;
regex_search(s, m, r);

if (m.size() > 0) {
    cout << "Tìm thấy: " << m[0] << '\n';
} else {
    cout << "Không khớp, size = " << m.size() << '\n'; // 0
}

Hàm liên quan

  • length(n): Độ dài của group n.
  • str(n): Chuỗi của group n (tương đương m[n]).
  • prefix(), suffix(): Phần trước/sau match.
  • operator[](n): Truy cập group n.