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

พื้นฐาน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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