การค้นหาและแทนที่
แปลงข้อความด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน regex
- กลุ่มจับคู่
- การค้นหาและแทนที่
- ข้อสังเกตด้านประสิทธิภาพ