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

match_results::length() trong C++ STL

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ém std::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 đương Mat[n].length().
  • Group không khớp (matched == false) có length = 0.
  • Ném out_of_range nếu n >= size() - khác với operator[] (UB).