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

match_results::prefix() và suffix() trong C++

std::match_results::prefix() và suffix() (header <regex>) trả về phần chuỗi trước và sau phần khớp (match) trong chuỗi gốc.

match_results::prefix()

  • Trả về const_reference đến sub-sequence trước match.
  • Nếu dùng regex_match (khớp toàn chuỗi), prefix luôn rỗng.
  • Nếu dùng regex_search (tìm kiếm con), prefix là phần từ đầu đến trước match.

match_results::suffix()

  • Trả về const_reference đến sub-sequence sau match.
  • Với regex_match, suffix luôn rỗng.
  • Với regex_search, suffix là phần từ sau match đến cuối chuỗi.

Cú pháp

const_reference prefix() const;
const_reference suffix() const;

Ví dụ 1: regex_search (tìm kiếm con)

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

int main() {
    string str = "Tutorials Points";
    regex R("Points"); // Tìm "Points"
    
    smatch Mat;
    regex_search(str, Mat, R); // Tìm kiếm con, không cần khớp toàn chuỗi
    
    if (!Mat.empty()) {
        cout << "Match: '" << Mat[0] << "'\n";
        cout << "Prefix: '" << Mat.prefix() << "'\n"; // Phần trước "Points"
        cout << "Suffix: '" << Mat.suffix() << "'\n"; // Phần sau "Points"
    }
    return 0;
}

Đầu ra

Match: 'Points'
Prefix: 'Tutorials '
Suffix: ''

Ví dụ 2: Suffix không rỗng

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

int main() {
    string str = "Tutorials Points is the best";
    regex R("Points");
    
    smatch Mat;
    regex_search(str, Mat, R);
    
    if (!Mat.empty()) {
        cout << "Match: '" << Mat[0] << "'\n";
        cout << "Prefix: '" << Mat.prefix() << "'\n"; // "Tutorials "
        cout << "Suffix: '" << Mat.suffix() << "'\n"; // " is the best"
    }
    return 0;
}

Đầu ra

Match: 'Points'
Prefix: 'Tutorials '
Suffix: ' is the best'

Ví dụ 3: regex_match (khớp toàn chuỗi)

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

int main() {
    string str = "Tutorials Points";
    regex R("(Tutorials)( Points)"); // Khớp toàn chuỗi
    
    smatch Mat;
    regex_match(str, Mat, R); // Phải khớp toàn bộ
    
    cout << "Match: '" << Mat[0] << "'\n";
    cout << "Prefix: '" << Mat.prefix() << "'\n"; // Luôn rỗng
    cout << "Suffix: '" << Mat.suffix() << "'\n"; // Luôn rỗng
    return 0;
}

Đầu ra

Match: 'Tutorials Points'
Prefix: ''
Suffix: ''

Ứng dụng thực tế: Tokenizer đơn giản

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

void tokenize(const string& s, const regex& delim) {
    string remaining = s;
    smatch m;
    
    while (regex_search(remaining, m, delim)) {
        // Token là prefix (phần trước delimiter)
        if (!m.prefix().str().empty())
            cout << "Token: '" << m.prefix() << "'\n";
        
        // Tiếp tục với suffix (phần sau delimiter)
        remaining = m.suffix();
    }
    
    // Token cuối cùng (sau delimiter cuối)
    if (!remaining.empty())
        cout << "Token: '" << remaining << "'\n";
}

int main() {
    string s = "one,two,three,four";
    regex delim(",");
    tokenize(s, delim);
    return 0;
}

Đầu ra

Token: 'one'
Token: 'two'
Token: 'three'
Token: 'four'