std::match_results::length(n) (header <regex>) trả về độ dài (số ký tự) của sub-match thứ n.
Cú pháp
difference_type length(size_type n) const;
n = 0: Độ dài toàn bộ match.n = 1, 2, ...: Độ dài capturing group thứ n.- Nếu
n >= size()→ némstd::out_of_range. - Nếu group n không tham gia match (optional group không khớp) → trả về 0.
Ví dụ 1: Độ dài các group
#include <bits/stdc.hh>
using namespace std;
int main() {
string str = "TutorialsPoint";
regex R("(Tutorials)(.*)");
smatch Mat;
regex_match(str, Mat, R);
for (size_t i = 0; i < Mat.size(); ++i) {
cout << "Group " << i << ": '" << Mat[i]
<< "', length = " << Mat.length(i) << '\n';
}
return 0;
}
Đầu ra
Group 0: 'TutorialsPoint', length = 14 Group 1: 'Tutorials', length = 9 Group 2: 'Point', length = 5
Ví dụ 2: Tìm group dài nhất
#include <bits/stdc++.h>
using namespace std;
int main() {
string str = "Tutorials Point";
regex R("(Tutorials)(.*)");
smatch Mat;
regex_match(str, Mat, R);
size_t max_len = 0;
string longest;
for (size_t i = 1; i < Mat.size(); ++i) { // Bỏ qua group 0
if (Mat.length(i) > max_len) {
max_len = Mat.length(i);
longest = Mat[i].str();
}
}
cout << "Group dài nhất (không tính group 0): '" << longest
<< "' độ dài " << max_len << '\n';
return 0;
}
Đầu ra
Group dài nhất (không tính group 0): 'Tutorials' độ dài 9
Ví dụ 3: Optional group (không khớp)
#include <bits/stdc++.h>
using namespace std;
int main() {
string str = "abc";
regex R("(a)(b)?(c)"); // Group 2 là optional
smatch Mat;
regex_match(str, Mat, R);
cout << "Size: " << Mat.size() << '\n'; // 4 (0,1,2,3)
for (size_t i = 0; i < Mat.size(); ++i) {
cout << "Group " << i << ": matched=" << Mat[i].matched
<< ", length=" << Mat.length(i)
<< ", value='" << Mat[i] << "'\n";
}
return 0;
}
Đầu ra
Size: 4 Group 0: matched=1, length=3, value='abc' Group 1: matched=1, length=1, value='a' Group 2: matched=0, length=0, value='' Group 3: matched=1, length=1, value='c'
Lưu ý
length(n)tương đươngMat[n].length().- Group không khớp (
matched == false) có length = 0. - Ném
out_of_rangenếu n >= size() - khác vớioperator[](UB).