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ếuregex_match/searchthất bại (match_results rỗng).- Luôn kiểm tra
!mat.empty()hoặcmat.size() > 0trước khi truy cậpmat[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 đươngm[n]).prefix(),suffix(): Phần trước/sau match.operator[](n): Truy cập group n.