0Pricing
C++ Academy · Pelajaran

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 grup
  • str(), position(), length(), prefix(), suffix()
  • sregex_iterator menelusuri 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.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar regex
  2. Grup Penangkap
  3. Pencarian dan Penggantian
  4. Catatan Performa
← Kembali ke C++ Academy