พื้นฐาน regex
จับคู่รูปแบบในข้อความ
พื้นฐาน regex เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
<regex> คืออะไร
ส่วนหัว <regex> ช่วยให้คุณจับคู่ข้อความกับรูปแบบของนิพจน์ปรกติที่อธิบายกลุ่มของสตริงได้ คุณสร้างรูปแบบขึ้นมา แล้วใช้รูปแบบนั้นทดสอบหรือค้นหาข้อความ
std::regexเก็บรูปแบบที่คอมไพล์แล้ว- ฟังก์ชันจับคู่จะรายงานว่าข้อความตรงตามรูปแบบหรือไม่
#include <iostream>
#include <regex>
int main() {
std::regex pattern("hello");
std::cout << std::boolalpha << std::regex_match("hello", pattern) << '\n';
return 0;
}regex_match เทียบกับ regex_search
regex_match กำหนดให้สตริงทั้งหมดต้องตรงกับรูปแบบ ส่วน regex_search จะสำเร็จหากพบรูปแบบนั้นที่ใดก็ได้ในสตริง
#include <iostream>
#include <regex>
int main() {
std::regex p("cat");
std::string s = "the cat sat";
std::cout << std::boolalpha;
std::cout << "match: " << std::regex_match(s, p) << '\n';
std::cout << "search: " << std::regex_search(s, p) << '\n';
return 0;
}กลุ่มอักขระ
วงเล็บเหลี่ยมใช้กำหนดกลุ่มอักขระที่อนุญาต [aeiou] จะจับคู่สระหนึ่งตัวใดก็ได้ ส่วนช่วงอย่าง [a-z] จะจับคู่ตัวอักษรพิมพ์เล็ก
#include <iostream>
#include <regex>
int main() {
std::regex p("[a-z]+");
std::cout << std::boolalpha << std::regex_match("hello", p) << '\n';
std::cout << std::regex_match("Hello", p) << '\n';
return 0;
}ตัวระบุจำนวน
ตัวระบุจำนวนควบคุมการทำซ้ำ: * คือศูนย์ครั้งขึ้นไป, + คือหนึ่งครั้งขึ้นไป, ? คือไม่บังคับ และ {n,m} คือช่วงจำนวน
#include <iostream>
#include <regex>
int main() {
std::regex p("a+b");
std::cout << std::boolalpha;
std::cout << std::regex_match("aaab", p) << '\n';
std::cout << std::regex_match("b", p) << '\n';
return 0;
}กลุ่มอักขระที่กำหนดไว้ล่วงหน้า
กลุ่มอักขระแบบย่อช่วยลดการพิมพ์: \\d จับคู่ตัวเลข, \\w จับคู่อักขระของคำ และ \\s จับคู่ช่องว่าง ในซอร์สโค้ด C++ ต้องเขียนเครื่องหมายแบ็กสแลชซ้ำสองครั้ง
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::cout << std::boolalpha;
std::cout << std::regex_match("12345", p) << '\n';
std::cout << std::regex_match("12a45", p) << '\n';
return 0;
}จุดยึด
จุดยึดจะตรึงการจับคู่ไว้กับตำแหน่งหนึ่ง: ^ ระบุจุดเริ่มต้น และ $ ระบุจุดสิ้นสุดของข้อความ จุดยึดจับคู่กับตำแหน่ง ไม่ใช่อักขระ
#include <iostream>
#include <regex>
int main() {
std::regex p("^abc$");
std::cout << std::boolalpha;
std::cout << std::regex_search("abc", p) << '\n';
std::cout << std::regex_search("xabc", p) << '\n';
return 0;
}การสลับทางเลือก
เครื่องหมายไปป์ | หมายถึง "หรือ" รูปแบบ cat|dog จะจับคู่คำใดคำหนึ่ง ใช้วงเล็บเพื่อจำกัดขอบเขตของการสลับทางเลือก
#include <iostream>
#include <regex>
int main() {
std::regex p("cat|dog");
std::cout << std::boolalpha;
std::cout << std::regex_match("cat", p) << '\n';
std::cout << std::regex_match("dog", p) << '\n';
std::cout << std::regex_match("fish", p) << '\n';
return 0;
}การหลีกอักขระพิเศษ
อักขระอย่าง ., * และ ( มีความหมายพิเศษ ให้ใส่แบ็กสแลชเพื่อจับคู่อักขระเหล่านั้นตามตัวอักษร
#include <iostream>
#include <regex>
int main() {
std::regex p("3\\.14");
std::cout << std::boolalpha;
std::cout << std::regex_match("3.14", p) << '\n';
std::cout << std::regex_match("3x14", p) << '\n';
return 0;
}การจับคู่โดยไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก
ส่งแฟล็กอย่าง std::regex::icase เมื่อสร้างรูปแบบ เพื่อไม่คำนึงถึงตัวพิมพ์ใหญ่เล็กระหว่างการจับคู่
#include <iostream>
#include <regex>
int main() {
std::regex p("hello", std::regex::icase);
std::cout << std::boolalpha;
std::cout << std::regex_match("HELLO", p) << '\n';
std::cout << std::regex_match("Hello", p) << '\n';
return 0;
}การตรวจสอบรูปแบบอย่างง่าย
รูปแบบเหมาะอย่างยิ่งสำหรับตรวจสอบรูปแบบของข้อมูลเข้า เช่น ตรวจว่าสตริงมีลักษณะเป็นตัวเลขพื้นฐานที่อาจมีเครื่องหมายกำกับหรือไม่
#include <iostream>
#include <regex>
bool isNumber(const std::string& s) {
static const std::regex p("-?\\d+");
return std::regex_match(s, p);
}
int main() {
std::cout << std::boolalpha;
std::cout << isNumber("-42") << '\n';
std::cout << isNumber("4a2") << '\n';
return 0;
}การจับคู่หลายครั้ง
รวมกลุ่มอักขระกับตัวระบุจำนวนเพื่อ ตรวจสอบรูปแบบที่ซับซ้อนขึ้น เช่น ลำดับตัวอักษรที่ตามด้วยตัวเลข
#include <iostream>
#include <regex>
int main() {
std::regex p("[A-Za-z]+\\d+");
std::cout << std::boolalpha;
std::cout << std::regex_match("abc123", p) << '\n';
std::cout << std::regex_match("123abc", p) << '\n';
return 0;
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับการจับคู่กับการค้นหา
สรุปทบทวน
คุณได้เรียนรู้พื้นฐานของ <regex>:
regex_matchสำหรับจับคู่ทั้งสตริง และregex_searchสำหรับจับคู่สตริงย่อย- กลุ่มอักขระ ตัวระบุจำนวน จุดยึด และการสลับทางเลือก
- กลุ่มอักขระที่กำหนดไว้ล่วงหน้า เช่น
\\dและการหลีกอักขระพิเศษ - แฟล็กอย่าง
icase
ถัดไป คุณจะได้แยกส่วนเฉพาะของการจับคู่โดยใช้กลุ่มจับ
คำถามที่พบบ่อย
บทเรียน “พื้นฐาน regex” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐาน regex” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน regex”
จับคู่รูปแบบในข้อความ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐาน regex” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน regex
- กลุ่มจับคู่
- การค้นหาและแทนที่
- ข้อสังเกตด้านประสิทธิภาพ