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'