Grup Penangkap
Ekstrak bagian yang cocok
Grup Penangkap adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Apa Itu Grup Penangkap?
Tanda kurung dalam pola membuat grup penangkap yang mengingat bagian teks yang dicocokkannya, sehingga Anda dapat mengekstraknya nanti.
(\\d+)menangkap deretan angka.- Hasilnya disimpan dalam
std::smatch.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d+)");
std::smatch m;
std::string s = "order 42";
if (std::regex_search(s, m, p)) {
std::cout << "Captured: " << m[1] << '\n';
}
return 0;
}Hasil Pencocokan
std::smatch menyimpan hasil pencocokan. Indeks [0] adalah seluruh pencocokan, sedangkan [1], [2], ... adalah grup penangkap secara berurutan.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\w+)@(\\w+)");
std::smatch m;
std::string s = "user@host";
if (std::regex_search(s, m, p)) {
std::cout << "Whole: " << m[0] << '\n';
std::cout << "User: " << m[1] << ", Host: " << m[2] << '\n';
}
return 0;
}Beberapa Grup
Anda dapat menangkap beberapa bagian sekaligus, misalnya memisahkan tanggal menjadi tahun, bulan, dan hari.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
std::smatch m;
std::string s = "2026-05-30";
if (std::regex_match(s, m, p)) {
std::cout << "Y=" << m[1] << " M=" << m[2] << " D=" << m[3] << '\n';
}
return 0;
}str(), position(), dan panjang()
Setiap grup menyediakan str() untuk teksnya, position() untuk posisinya, dan length() untuk ukurannya dalam masukan.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d+)");
std::smatch m;
std::string s = "abc 789 xyz";
if (std::regex_search(s, m, p)) {
std::cout << "str: " << m[1].str() << '\n';
std::cout << "pos: " << m.position(1) << '\n';
std::cout << "len: " << m.length(1) << '\n';
}
return 0;
}Prefix dan Suffix
Objek pencocokan juga menyediakan prefix() (teks sebelum pencocokan) dan suffix() (teks setelahnya).
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::smatch m;
std::string s = "left 55 right";
if (std::regex_search(s, m, p)) {
std::cout << "prefix: [" << m.prefix() << "]\n";
std::cout << "suffix: [" << m.suffix() << "]\n";
}
return 0;
}Grup Tanpa Penangkapan
Gunakan (?:...) untuk mengelompokkan tanpa menangkap. Dengan begitu, grup bernomor tetap bermakna ketika Anda hanya memerlukan pengelompokan untuk kuantifikator atau alternasi.
#include <iostream>
#include <regex>
int main() {
std::regex p("(?:Mr|Ms) (\\w+)");
std::smatch m;
std::string s = "Ms Smith";
if (std::regex_search(s, m, p)) {
std::cout << "Name: " << m[1] << '\n';
}
return 0;
}Memeriksa Apakah Grup Cocok
Grup opsional mungkin tidak berpartisipasi dalam pencocokan. Uji matched pada subpencocokan untuk mengetahui apakah grup tersebut menangkap sesuatu.
#include <iostream>
#include <regex>
int main() {
std::regex p("file(\\.txt)?");
std::smatch m;
std::string s = "file";
if (std::regex_match(s, m, p)) {
std::cout << std::boolalpha << "ext matched: " << m[1].matched << '\n';
}
return 0;
}Menelusuri Semua Pencocokan
std::sregex_iterator menelusuri setiap pencocokan dalam string dan memberikan setiap grup di sepanjang proses tersebut.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d+)");
std::string s = "a1 b22 c333";
auto begin = std::sregex_iterator(s.begin(), s.end(), p);
auto end = std::sregex_iterator();
for (auto it = begin; it != end; ++it) {
std::cout << (*it)[1] << '\n';
}
return 0;
}Menghitung Pencocokan
Gabungkan pengiterasi dengan std::distance untuk menghitung berapa kali suatu pola muncul.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::string s = "1 22 333 4444";
auto begin = std::sregex_iterator(s.begin(), s.end(), p);
auto end = std::sregex_iterator();
std::cout << "Count: " << std::distance(begin, end) << '\n';
return 0;
}Mengekstrak Pasangan Kunci-Nilai
Dua grup untuk setiap pencocokan memungkinkan Anda mengurai teks terstruktur sederhana, seperti token key=value.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\w+)=(\\w+)");
std::string s = "a=1 b=2 c=3";
auto begin = std::sregex_iterator(s.begin(), s.end(), p);
auto end = std::sregex_iterator();
for (auto it = begin; it != end; ++it) {
std::cout << (*it)[1] << " -> " << (*it)[2] << '\n';
}
return 0;
}Menyimpan Tangkapan
Salin subpencocokan yang tertangkap ke dalam std::string dengan str() agar datanya tetap valid setelah objek pencocokan tidak lagi digunakan.
#include <iostream>
#include <regex>
#include <string>
int main() {
std::regex p("v(\\d+)");
std::smatch m;
std::string s = "version v7";
std::string version;
if (std::regex_search(s, m, p)) {
version = m[1].str();
}
std::cout << "Stored: " << version << '\n';
return 0;
}Uji Cepat
Uji pemahaman Anda tentang pengindeksan grup penangkap.
Rangkuman
Anda telah mempelajari cara mengekstrak data dengan grup penangkap:
- tanda kurung menangkap;
(?:...)mengelompokkan tanpa menangkap smatch[0]adalah seluruh pencocokan, sedangkan[1]dan seterusnya adalah grupstr(),position(),length(),prefix(),suffix()sregex_iteratormenelusuri setiap pencocokan
Selanjutnya, Anda akan mengubah teks menggunakan pencarian dan penggantian.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Grup Penangkap” gratis?
Ya — teks lengkap “Grup Penangkap” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Grup Penangkap”?
Ekstrak bagian yang cocok Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Grup Penangkap” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.