Regular Expression คืออะไร? คำอธิบายฉบับสมบูรณ์
ตอบด่วน
Regular expression คือรูปแบบที่อธิบายเซตของสตริง ใช้ literal character และ metacharacter (*, +, ?, ., ^, $, [], (), {}, |, \) ความหมายพิเศษ regex ใช้ validate search extract และ replace ใช้ Regex Tester ฟรีของเรา
การแนะนำ
Regular expression (regex หรือ regexp) คือลำดับอักขระที่กำหนดรูปแบบ search ใช้โดย algorithm string-searching เพื่อหา match หรือ replace ข้อความ regex มีต้นกำเนิดใน formal language theory ทศวรรษ 1950 (Stephen Kleene) และใช้ใน Unix text tool (grep, sed, awk) ทศวรรษ 1970 ปัจจุบัน regex มีในทุกภาษาและ editor
ทีละขั้นตอน
-
ทำความเข้าใจเกี่ยวกับตัวอักษรและอักขระเมตา
อักขระตัวอักษร (a, b, 1, @) ตรงกัน MetaCharacter มีความหมายพิเศษ: . ตรงกับอักขระใดๆ * หมายถึงศูนย์หรือมากกว่า + หมายถึงหนึ่งตัวขึ้นไป ? หมายถึงศูนย์หรือหนึ่ง ^ การแข่งขันเริ่มต้น การแข่งขัน $ สิ้นสุด
-
เรียนรู้คลาสตัวละคร
วงเล็บเหลี่ยม [] กำหนดคลาสอักขระ — [aeiou] จับคู่สระใดๆ, [0-9] จับคู่ตัวเลขใดๆ ก็ตาม [^0-9] จับคู่ใดๆ ที่ไม่ใช่ตัวเลข คลาสชวเลข: \d (หลัก), \w (อักขระคำ), \s (ช่องว่าง) และการปฏิเสธตัวพิมพ์ใหญ่
-
ใช้ปริมาณ
ตัวระบุปริมาณจะระบุจำนวนครั้งที่รูปแบบเกิดซ้ำ: * (0+), + (1+), ? (0 หรือ 1), {n} (ตรงกับ n), {n,} (n+), {n,m} (n ถึง m) โลภโดยค่าเริ่มต้น เพิ่ม ? สำหรับการจับคู่แบบ Lazy Match (เช่น *?)
-
จัดกลุ่มและยึดเหนี่ยว
วงเล็บ () สร้างกลุ่มการจับภาพ การสลับ | ตรงกับด้านใดด้านหนึ่ง (แมว|สุนัข) Anchors ^ และ $ จับคู่จุดเริ่มต้นและจุดสิ้นสุดของสตริง ใช้สิ่งเหล่านี้เพื่อสร้างรูปแบบที่ซับซ้อนจากรูปแบบที่เรียบง่ายกว่า
ตัวอย่าง
จับคู่รูปแบบคล้ายอีเมล
ป้อนข้อมูล: Pattern: [a-z]+@[a-z]+\.[a-z]+
เอาท์พุต: การแข่งขัน: alice@example.com, bob@test.org
จับคู่รูปแบบหมายเลขโทรศัพท์
ป้อนข้อมูล: Pattern: \d{3}-\d{3}-\d{4}
เอาท์พุต: Matches: 555-123-4567
แยกคู่คีย์-ค่า
ป้อนข้อมูล: Pattern: (\w+)=(\w+)
เอาท์พุต: Matches 'key=value' with group 1 as key, group 2 as value
ปัญหาทั่วไป
- การจับคู่แบบโลภสิ้นเปลือง —.* จับคู่ให้มากที่สุด ใช้ .*? เพื่อการจับคู่แบบขี้เกียจเพื่อค้นหาการจับคู่ที่สั้นที่สุด
- การลืมที่จะหลีกอักขระพิเศษ —., *, +, ? ฯลฯ ถือเป็นอักขระพิเศษ ใช้ \ เพื่อจับคู่ตามตัวอักษร (เช่น \. จับคู่จุดตามตัวอักษร)
- การย้อนรอยหายนะ —รูปแบบที่มีตัวระบุเชิงซ้อน (เช่น (a+)+) อาจใช้เวลาแบบเอ็กซ์โปเนนเชียลในอินพุตบางตัว ทำให้เกิดการโจมตี ReDoS
- การจับคู่ที่มากเกินไป - ไม่มีจุดยึด (^ และ $) รูปแบบจะเข้ากันทุกที่ ใช้ ^...$ เพื่อจับคู่สตริงทั้งหมด
เคล็ดลับ
- เริ่มต้นแบบเรียบง่ายและเพิ่มความซับซ้อนทีละน้อย การดีบัก regex ที่ซับซ้อนทั้งหมดในคราวเดียวนั้นยากมาก
- ใช้เครื่องมือทดสอบ regex เพื่อทดสอบรูปแบบกับข้อความตัวอย่าง ดูการจับคู่ที่ไฮไลต์แบบเรียลไทม์
- แสดงความคิดเห็น regexes ที่ซับซ้อนโดยใช้โหมดขยาย (/x flag ในเอ็นจิ้นบางตัว) หรือแยกออกเป็นส่วนที่มีชื่อ
- ใช้ Regex Tester ของเราเพื่อทดสอบรูปแบบทันทีในเบราว์เซอร์ของคุณ ไม่ต้องสมัคร เป็นส่วนตัวโดยสมบูรณ์