0Pricing
C++ Academy · บทเรียน

การค้นหาและแทนที่

แปลงข้อความด้วย regex

การค้นหาและแทนที่ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

regex_replace

std::regex_replace จะส่งคืนสตริงใหม่ที่การจับคู่ทุกครั้งของรูปแบบถูกแทนที่ด้วยสตริงทดแทน

  • สตริงเดิมจะไม่เปลี่ยนแปลง
  • ตามค่าเริ่มต้น การจับคู่ทั้งหมดจะถูกแทนที่
#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;
}

การแทนที่ตัวเลข

รูปแบบช่วยให้แก้ไขข้อมูลจำนวนมากได้ง่าย เช่น แทนที่ตัวเลขทุกตัวในสตริงด้วยตัวแทน

#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;
}

การอ้างอิงย้อนกลับในการแทนที่

ใช้ $1, $2, ... ในสตริงทดแทนเพื่อแทรกกลุ่มจับ ทำให้คุณจัดเรียงข้อความใหม่ได้

#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;
}

การจับคู่ทั้งหมด: $&

โทเค็น $& หมายถึงการจับคู่ทั้งหมด ซึ่งมีประโยชน์สำหรับครอบข้อความที่พบด้วยอักขระเพิ่มเติม

#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;
}

แทนที่เฉพาะครั้งแรก

ส่ง std::regex_constants::format_first_only เพื่อแทนที่เฉพาะการจับคู่ครั้งแรก แทนที่จะแทนที่ทุกครั้งที่พบ

#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;
}

การปรับช่องว่างให้เป็นรูปแบบเดียวกัน

งานทำความสะอาดที่พบบ่อยคือยุบช่องว่างที่ต่อเนื่องกันให้เหลือช่องว่างเดียว

#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;
}

การลบการจับคู่

การแทนที่ด้วยสตริงว่างจะมีผลเท่ากับการลบการจับคู่ทุกครั้ง เหมาะสำหรับตัดอักขระที่ไม่ต้องการออก

#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;
}

การจัดรูปแบบวันที่ใหม่

จับส่วนต่าง ๆ ของวันที่ แล้วจัดเรียงใหม่ในส่วนทดแทนเพื่อเปลี่ยนรูปแบบ

#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;
}

การคงข้อความที่ไม่ตรงกับรูปแบบ

ตามค่าเริ่มต้น ข้อความที่ไม่ตรงกับรูปแบบจะถูกคัดลอกต่อไป ใช้ format_no_copy เพื่อแสดงเฉพาะส่วนทดแทนและทิ้งส่วนที่เหลือ

#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;
}

การปิดบังคำ

รวมการสลับทางเลือกกับการแทนที่เพื่อปิดบังรายการคำหลายคำได้ในครั้งเดียว

#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;
}

การสร้างผลลัพธ์

เนื่องจาก regex_replace ส่งคืนสตริง คุณจึงเชื่อมการแปลงหลายขั้นตอนได้โดยส่งผลลัพธ์หนึ่งเข้าไปในการเรียกครั้งถัดไป

#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;
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับไวยากรณ์การแทนที่

สรุปทบทวน

คุณได้เรียนรู้การแปลงข้อความด้วย regex_replace:

  • แทนที่การจับคู่ทั้งหมดตามค่าเริ่มต้นและส่งคืนสตริงใหม่
  • $1, $2, $& ใช้แทรกกลุ่มจับและการจับคู่ทั้งหมด
  • แฟล็กอย่าง format_first_only และ format_no_copy
  • เชื่อมการเรียกใช้เพื่อสร้างการทำความสะอาดข้อมูลที่ซับซ้อน

ถัดไป คุณจะได้เรียนรู้วิธีใช้ regex อย่างมีประสิทธิภาพและหลีกเลี่ยงกับดักด้านประสิทธิภาพที่พบบ่อย

คำถามที่พบบ่อย

บทเรียน “การค้นหาและแทนที่” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การค้นหาและแทนที่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การค้นหาและแทนที่”

แปลงข้อความด้วย regex คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การค้นหาและแทนที่” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน regex
  2. กลุ่มจับคู่
  3. การค้นหาและแทนที่
  4. ข้อสังเกตด้านประสิทธิภาพ
← กลับไปที่ C++ Academy