ชีทสรุป Regular Expression และรูปแบบที่ใช้บ่อย
Regular Expression หรือ regex เป็นเครื่องมือจับคู่รูปแบบที่ทรงพลังที่ใช้ในเกือบทุกภาษาโปรแกรมและเท็กซ์เอดิเตอร์ แม้ว่าไวยากรณ์อาจดูเข้าใจยากในตอนแรก แต่การเชี่ยวชาญ Regular Expression ช่วยให้คุณค้นหา ตรวจสอบ ดึงข้อมูล และแปลงข้อความได้อย่างแม่นยำ ซึ่งการดำเนินการเหล่านี้อาจต้องใช้โค้ดหลายสิบบรรทัดหากเขียนแบบขั้นตอน คู่มือนี้ครอบคลุมไวยากรณ์พื้นฐาน รูปแบบที่ใช้บ่อย และเคล็ดลับปฏิบัติที่คุณต้องรู้
ชีทสรุปไวยากรณ์ Regular Expression พื้นฐาน
คลาสอักขระ
| รูปแบบ | ความหมาย | ตัวอย่าง |
|---|---|---|
| . | อักขระใดๆ ยกเว้นขึ้นบรรทัดใหม่ | สำคัญ |
| \d | ตัวเลขใดๆ (0-9) | จัดการ Vendor Management |
| \D | อะไรก็ได้ที่ไม่ใช่ตัวเลข | จับคู่อักขระช่องว่าง |
| \w | อักขระคำ (a-z, A-Z, 0-9, _) | สามารถส่งออกข้อมูลนาฬิกาจับเวลาได้หรือไม่? |
| \W | อักขระที่ไม่ใช่คำ | การทำงานร่วมกัน |
| \s | อักขระช่องว่าง (เว้นวรรค, แท็บ, ขึ้นบรรทัดใหม่) | จัดการ Configuration Management |
| \S | อักขระที่ไม่ใช่ช่องว่าง | จัดการ Security Policy |
| [abc] | อักขระใดๆ ในเซต | จัดการ Transportation Management |
| [^abc] | อักขระใดๆ ที่ไม่อยู่ในเซต | จัดการ Appointment Management |
| [a-z] | ช่วงอักขระ | การรับรองความถูกต้อง |
ตัวระบุปริมาณ
| รูปแบบ | ความหมาย | ตัวอย่าง |
|---|---|---|
| * | ศูนย์ครั้งหรือมากกว่า | ดึงข้อมูลแท็ก HTML |
| + | หนึ่งครั้งหรือมากกว่า | ab+c จับคู่ abc, abbc |
| ? | ศูนย์ครั้งหรือหนึ่งครั้ง | ตั้งชั่วโมง นาที และวินาที |
| {n} | ตรง n ครั้ง | ปรับระยะเวลา Pomodoro ตามความซับซ้อนของงาน |
| {n,} | n ครั้งหรือมากกว่า | \d{2,} จับคู่ตัวเลข 2 หลักขึ้นไป |
| {n,m} | n ถึง m ครั้ง | การทำให้เป็นมาตรฐาน |
anchor และขอบเขต
| รูปแบบ | ความหมาย | ตัวอย่าง |
|---|---|---|
| ^ | จุดเริ่มต้นของสตริงหรือบรรทัด | จำนวนเงินสุดท้าย |
| $ | จุดสิ้นสุดของสตริงหรือบรรทัด | จัดการธุรกรรม |
| \b | ขอบเขตคำ | ติดตามความยาวการพูดหรือการนำเสนอ |
| \B | ไม่ใช่ขอบเขตคำ | การวิเคราะห์ |
การจัดกลุ่มและ alternation
| รูปแบบ | ความหมาย | ตัวอย่าง |
|---|---|---|
| (abc) | กลุ่มจับคู่ | จัดการ Review Management |
| (?:abc) | กลุ่มไม่จับคู่ | จัดการการแสดงผลฝั่งเซิร์ฟเวอร์ |
| a|b | alternation (หรือ) | ตัวจับเวลาออนไลน์ทำงานอย่างไร |
| \1 | backreference ไปยังกลุ่ม 1 | การรีเฟรช |
| กลุ่มจับคู่ที่มีชื่อ | แสดงเวลาที่เหลือในชื่อหน้า |
รูปแบบ Regular Expression ที่ใช้บ่อย
นี่คือรูปแบบ Regular Expression ที่ใช้บ่อยที่สุดในการพัฒนาเว็บและการตรวจสอบข้อมูล:
การตรวจสอบอีเมล
Regular Expression สำหรับอีเมลที่ใช้งานได้จริง ซึ่งจับที่อยู่ที่ไม่ถูกต้องส่วนใหญ่โดยไม่เข้มงวดเกินไป: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ รูปแบบนี้ตรวจสอบโครงสร้างอีเมลพื้นฐานในขณะที่อนุญาตอักขระทั่วไปในส่วน local และต้องการชื่อโดเมนที่ถูกต้องพร้อม TLD อย่างน้อยสองตัวอักษร
การตรวจสอบ URL
จับคู่ HTTP และ HTTPS URL: ^https?:\/\/(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$ รูปแบบนี้จับคู่ URL พร้อมคำนำหน้า www ที่เป็นตัวเลือก ชื่อโดเมน และเส้นทางที่เป็นตัวเลือก
หมายเลขโทรศัพท์ (สหรัฐอเมริกา)
รูปแบบต่างๆ ของหมายเลขโทรศัพท์สหรัฐอเมริกา: ^\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$ รูปแบบนี้จัดการรูปแบบเช่น (555) 123-4567, 555-123-4567 และ 5551234567
ที่อยู่ IP (IPv4)
ตรวจสอบที่อยู่ IPv4: ^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$ รูปแบบนี้ช่วยให้มั่นใจว่าแต่ละ octet อยู่ระหว่าง 0 ถึง 255
วันที่ (YYYY-MM-DD)
รูปแบบวันที่ ISO: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ รูปแบบนี้ตรวจสอบโครงสร้างรูปแบบแต่ไม่ตรวจสอบวันที่ที่ถูกต้องในแต่ละเดือน
รหัสสีเลขฐานสิบหก
จับคู่สีเลขฐานสิบหก CSS: ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ รูปแบบนี้จับคู่รูปแบบย่อ 3 หลัก (#fff) และรูปแบบเต็ม 6 หลัก (#ffffff)
เทคนิคขั้นสูง
lookahead และ lookbehind
assertion แบบ lookahead และ lookbehind ช่วยให้คุณจับคู่เฉพาะเมื่อมี (หรือไม่มี) รูปแบบอื่นตามหลัง (หรือก่อนหน้า) รูปแบบ โดยไม่รวมข้อความรอบข้างในผลลัพธ์การจับคู่
- positive lookahead (?=pattern): จับคู่เฉพาะเมื่อรูปแบบอยู่ข้างหลัง ตัวอย่าง: \d(?=px) จับคู่เฉพาะตัวเลขที่อยู่ก่อน "px"
- negative lookahead (?!pattern): จับคู่เฉพาะเมื่อรูปแบบไม่อยู่ข้างหลัง ตัวอย่าง: \d(?!px) จับคู่ตัวเลขที่ไม่อยู่ก่อน "px"
- <=pattern): จับคู่เฉพาะเมื่อรูปแบบอยู่ข้างหน้า ตัวอย่าง: (?<=\$)\d+ จับคู่ตัวเลขที่อยู่หลังเครื่องหมายดอลลาร์
การจับคู่แบบ greedy กับ lazy
<.*>bold<.*?>"
เคล็ดลับประสิทธิภาพ Regular Expression
- ใช้ non-capturing group (?:) เมื่อไม่ต้องการดึงเนื้อหาของกลุ่มที่จับคู่
- ใช้ possessive quantifier หรือ atomic group เมื่อรองรับเพื่อหลีกเลี่ยงการ backtracking มากเกินไป
- ใช้คลาสอักขระที่เฉพาะเจาะจงแทนการใช้ dot metacharacter อย่างกว้างขวาง
- ใช้ ^ และ $ เพื่อยึดรูปแบบของคุณเมื่อต้องการจับคู่ทั้งสตริง
- คอมไพล์รูปแบบ Regular Expression ล่วงหน้าเมื่อใช้ซ้ำในลูป
- ใช้ word boundary \b แทน ^ และ $ เมื่อค้นหาในข้อความขนาดใหญ่
การทดสอบและดีบัก Regular Expression
ก่อนปรับใช้รูปแบบ Regular Expression ควรทดสอบด้วยข้อมูลจริงเสมอ ใช้เครื่องมือทดสอบ Regular Expression แบบโต้ตอบที่เน้นการจับคู่แบบเรียลไทม์และอธิบายแต่ละส่วนของรูปแบบ สิ่งนี้ช่วยให้คุณจับกรณีขอบและเข้าใจว่าทำไมรูปแบบจึงจับคู่หรือไม่จับคู่กับข้อมูลที่ระบุ ลองใช้เครื่องมือทดสอบ Regular Expression ฟรีของเราเพื่อสร้างและทดสอบรูปแบบของคุณแบบโต้ตอบ
ใช้เครื่องมือฟรีของเราเพื่อสร้าง ทดสอบ และดีบักรูปแบบ Regular Expression ของคุณ
ลองใช้เครื่องมือทดสอบ Regular Expressionชีทสรุป Regular Expressionคำถามที่พบบ่อย
การจับคู่ regex แบบ greedy และ lazy แตกต่างกันอย่างไร?
ตัวระบุปริมาณแบบ greedy จับคู่ข้อความให้มากที่สุด ในขณะที่ตัวระบุปริมาณแบบ lazy จับคู่ข้อความให้น้อยที่สุด การเพิ่มเครื่องหมายคำถามหลังตัวระบุปริมาณทำให้เป็นแบบ lazy ตัวอย่างเช่น .* จับคู่สตริงที่ยาวที่สุดที่เป็นไปได้ ในขณะที่ .*? จับคู่สตริงที่สั้นที่สุด
Regular Expression เหมือนกันในทุกภาษาโปรแกรมหรือไม่?
ไม่ การใช้งาน Regular Expression แตกต่างกันไปตามภาษา ส่วนใหญ่รองรับไวยากรณ์ POSIX พื้นฐาน แต่คุณสมบัติขั้นสูงเช่น lookbehind, named groups และการรองรับ Unicode แตกต่างกัน JavaScript ในอดีตมีการสนับสนุน Regular Expression ที่จำกัด แต่ได้เพิ่มคุณสมบัติมากมายในช่วงไม่กี่ปีที่ผ่านมา
Regular Expression สามารถแยกวิเคราะห์ HTML หรือ XML ได้หรือไม่?
ไม่ Regular Expression ไม่สามารถแยกวิเคราะห์ HTML หรือ XML ได้อย่างน่าเชื่อถือเพราะเป็นภาษาที่มีการซ้อนแบบ context-free Regular Expression ไม่มีแนวคิดเรื่องความลึกของการซ้อนหรือแท็กที่สมดุล ใช้ parser HTML หรือ XML ที่เหมาะสมแทน Regular Expression สามารถดึงรูปแบบง่ายๆ จาก HTML ได้ แต่จะล้มเหลวกับโครงสร้างที่ซับซ้อน
lookahead และ lookbehind ใน Regular Expression คืออะไร?
<=pattern) เป็น positive lookbehind จับคู่ถ้ารูปแบบอยู่ข้างหน้า เวอร์ชันปฏิเสธใช้ ! แทน =
จะทำให้ Regular Expression ไม่สนใจตัวพิมพ์เล็ก-ใหญ่ได้อย่างไร?
การเพิ่มแฟล็ก i หลังตัวคั่นปิดทำให้ทั้งรูปแบบไม่สนใจตัวพิมพ์เล็ก-ใหญ่ ใน JavaScript ใช้ /pattern/i ใน Python ใช้ re.IGNORECASE หรือ re.I เป็นแฟล็ก คุณยังสามารถใช้ (?i) แบบอินไลน์เพื่อทำให้ส่วนเฉพาะไม่สนใจตัวพิมพ์เล็ก-ใหญ่
ToolHub's collection of 300+ free online tools including regex tester, cheat sheets, and more — no sign-up required.