C++ Academy · Pelajaran

Mencari dan Menggantikan

Ubah teks dengan regex

Pelajaran 3 daripada 413 langkah

Mencari dan Menggantikan ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

regex_replace

std::regex_replace mengembalikan rentetan baharu yang menggantikan setiap padanan corak dengan rentetan penggantian.

  • Rentetan asal tidak berubah.
  • Secara lalai, semua padanan digantikan.
#include <iostream>
#include <regex>

int main() {
    std::regex p("cat");
    std::string s = "the cat and the cat";
    std::cout << std::regex_replace(s, p, "dog") << '\n';
    return 0;
}

Menggantikan Angka

Corak memudahkan pengeditan besar-besaran, seperti menutup setiap angka dalam rentetan dengan ruang letak.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d");
    std::string s = "PIN 1234";
    std::cout << std::regex_replace(s, p, "*") << '\n';
    return 0;
}

Rujukan Balik dalam Penggantian

Gunakan $1, $2, ... dalam rentetan penggantian untuk memasukkan kumpulan yang ditangkap, sekali gus membolehkan Anda menyusun semula teks.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\w+) (\\w+)");
    std::string s = "John Smith";
    std::cout << std::regex_replace(s, p, "$2 $1") << '\n';
    return 0;
}

Keseluruhan Padanan: $&

Token $& merujuk kepada keseluruhan padanan dan berguna untuk membungkus teks yang ditemui dengan aksara tambahan.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "item 42";
    std::cout << std::regex_replace(s, p, "[$&]") << '\n';
    return 0;
}

Gantikan Padanan Pertama Sahaja

Hantarkan std::regex_constants::format_first_only untuk menggantikan padanan pertama sahaja, bukannya setiap kejadian.

#include <iostream>
#include <regex>

int main() {
    std::regex p("o");
    std::string s = "foo boo";
    auto out = std::regex_replace(s, p, "0", std::regex_constants::format_first_only);
    std::cout << out << '\n';
    return 0;
}

Menormalkan Ruang Kosong

Tugas pembersihan yang biasa ialah memadatkan rangkaian ruang kosong menjadi satu ruang.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\s+");
    std::string s = "too    many     spaces";
    std::cout << std::regex_replace(s, p, " ") << '\n';
    return 0;
}

Mengalih Keluar Padanan

Menggantikan padanan dengan rentetan kosong secara berkesan memadamkan setiap padanan, yang berguna untuk membuang aksara yang tidak diingini.

#include <iostream>
#include <regex>

int main() {
    std::regex p("[^a-zA-Z]");
    std::string s = "a1b2c3";
    std::cout << std::regex_replace(s, p, "") << '\n';
    return 0;
}

Memformat Semula Tarikh

Tangkap bahagian tarikh dan susun semula bahagian tersebut dalam penggantian untuk menukar format.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
    std::string s = "2026-05-30";
    std::cout << std::regex_replace(s, p, "$3/$2/$1") << '\n';
    return 0;
}

Mengekalkan Teks yang Tidak Dipadankan

Secara lalai, teks yang tidak dipadankan disalin seperti biasa. Gunakan format_no_copy untuk mengeluarkan penggantian sahaja dan membuang selebihnya.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "a1b2c3";
    auto out = std::regex_replace(s, p, "$&", std::regex_constants::format_no_copy);
    std::cout << out << '\n';
    return 0;
}

Menyensor Perkataan

Gabungkan alternasi dengan penggantian untuk menyensor senarai perkataan serentak.

#include <iostream>
#include <regex>

int main() {
    std::regex p("bad|evil");
    std::string s = "a bad and evil idea";
    std::cout << std::regex_replace(s, p, "***") << '\n';
    return 0;
}

Membina Hasil

Oleh sebab regex_replace mengembalikan rentetan, Anda boleh merangkaikan transformasi dengan memasukkan satu hasil ke dalam panggilan seterusnya.

#include <iostream>
#include <regex>

int main() {
    std::string s = "  Hello,   World  ";
    s = std::regex_replace(s, std::regex("\\s+"), " ");
    s = std::regex_replace(s, std::regex("^ | $"), "");
    std::cout << "[" << s << "]\n";
    return 0;
}

Semakan Pantas

Uji pemahaman Anda tentang sintaks penggantian.

Ulang Kaji

Anda telah mempelajari cara mengubah teks dengan regex_replace:

  • secara lalai, semua padanan digantikan dan rentetan baharu dikembalikan
  • $1, $2, $& memasukkan tangkapan dan keseluruhan padanan
  • bendera seperti format_first_only dan format_no_copy
  • rangkaikan panggilan untuk membina pembersihan yang kompleks

Seterusnya, Anda akan mempelajari cara menggunakan regex dengan cekap dan mengelakkan perangkap prestasi yang biasa.

Percuma untuk bermula

Pelajari C++ dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Mencari dan Menggantikan” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Mencari dan Menggantikan”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mencari dan Menggantikan”?

Ubah teks dengan regex Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Mencari dan Menggantikan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Asas regex
  2. Kumpulan Tangkapan
  3. Mencari dan Menggantikan
  4. Nota Prestasi
← Kembali ke C++ Academy