0Pricing
Ruby Academy · บทเรียน

การจับคู่และการจับกลุ่ม

match และ captures

การจับคู่และการจับกลุ่ม เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน

อ็อบเจ็กต์ MatchData

เมื่อคุณเรียก regex.match(string) Ruby จะคืนค่าอ็อบเจ็กต์ MatchData เมื่อสำเร็จ หรือคืนค่า nil เมื่อล้มเหลว

MatchData เก็บข้อความที่จับคู่ได้และกลุ่มที่จับข้อมูลได้

m = /world/.match('hello world')
puts m.class
puts(m[0])

match ทั้งหมด: ดัชนี 0

ดัชนี 0 ของ MatchData จะเป็นสตริงย่อยที่จับคู่ได้ทั้งหมดเสมอ ไม่ว่าจะมีกลุ่มใดหรือไม่

m = /\d+/.match('order 4521 shipped')
puts(m[0])
puts(m.to_s)

กลุ่มที่จับข้อมูล

วงเล็บ ( ) ใช้สร้างกลุ่มที่จับข้อมูล แต่ละกลุ่มเข้าถึงได้ด้วยหมายเลขที่เริ่มจาก 1

m = /(\d{4})-(\d{2})/.match('2026-05')
puts(m[1])
puts(m[2])

เมธอด captures

captures คืนค่าอาร์เรย์ของกลุ่มที่จับข้อมูลได้ทั้งหมด (ไม่รวม match ทั้งหมดที่ดัชนี 0)

m = /(\w+)@(\w+)/.match('alice@example')
p m.captures

การแยกค่าที่จับข้อมูลได้

เนื่องจาก captures คืนค่าเป็นอาร์เรย์ คุณจึงสามารถแยกค่าผลลัพธ์ออกเป็นตัวแปรได้โดยตรง

user, host = /(\w+)@(\w+)/.match('bob@server').captures
puts user
puts host

ก่อนและหลัง match

MatchData มีตัวช่วยสำหรับข้อความที่อยู่รอบ match:

  • pre_match ส่วนที่อยู่ก่อนหน้า
  • post_match ส่วนที่อยู่ถัดไป
m = /\d+/.match('abc123xyz')
puts(m.pre_match)
puts(m.post_match)

scan เพื่อค้นหา match ทั้งหมด

String#scan คืนค่าอาร์เรย์ของ match ทุกตัวในสตริง ไม่ใช่เพียงตัวแรก

nums = '12 cats, 8 dogs, 3 birds'.scan(/\d+/)
p nums

scan พร้อมกลุ่ม

หากรูปแบบของคุณมีกลุ่ม scan จะคืนค่าอาร์เรย์ของอาร์เรย์ โดยมีหนึ่งอาร์เรย์ต่อหนึ่ง match และแต่ละอาร์เรย์จะเก็บข้อมูลที่จับได้ของ match นั้น

pairs = 'a=1 b=2 c=3'.scan(/(\w)=(\d)/)
p pairs

การจัดการกรณีไม่มีค่าอย่างปลอดภัย

โปรดจำไว้เสมอว่า match จะคืนค่า nil เมื่อไม่พบ match คุณต้องตรวจสอบกรณีนี้ก่อนนำผลลัพธ์ไปใช้

m = /(\d+)/.match('no digits here')
if m
  puts m[1]
else
  puts 'no match found'
end

ตัวแปรพิเศษ

หลังจากจับคู่สำเร็จ Ruby จะกำหนดตัวแปรส่วนกลางดังนี้: $~ คือ MatchData และ $1, $2 คือข้อมูลที่จับได้ตามหมายเลข

ตัวแปรเหล่านี้มีประโยชน์ในสคริปต์สั้น ๆ แต่การระบุ MatchData โดยตรงจะอ่านเข้าใจได้ชัดเจนกว่าในโค้ดจริง

if 'name: Alice' =~ /name: (\w+)/
  puts $1
end

การดึงวันที่

ใช้กลุ่มและข้อมูลที่จับได้ร่วมกันเพื่อดึงข้อมูลที่มีโครงสร้างจากสตริงได้ในขั้นตอนเดียว

year, month, day = /(\d{4})-(\d{2})-(\d{2})/.match('2026-05-29').captures
puts "Year #{year}, Month #{month}, Day #{day}"

ตรวจสอบความเข้าใจ

เมื่อกำหนดให้ 'a=1 b=2'.scan(/(\w)=(\d)/) ผลลัพธ์มีโครงสร้างอย่างไร

สรุปทบทวน: การจับคู่และการเก็บข้อมูล

ตอนนี้คุณสามารถดึงข้อมูลจาก match ได้แล้ว:

  • match คืนค่า MatchData หรือ nil
  • ดัชนี 0 คือ match ทั้งหมด ส่วน 1 ขึ้นไปคือกลุ่มต่าง ๆ
  • captures คืนค่ากลุ่มทั้งหมดเป็นอาร์เรย์
  • scan ค้นหา match ทุกตัวในสตริง
  • ตรวจสอบกรณี nil เสมอ
p 'x1 y2 z3'.scan(/([a-z])(\d)/)

คำถามที่พบบ่อย

บทเรียน “การจับคู่และการจับกลุ่ม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจับคู่และการจับกลุ่ม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจับคู่และการจับกลุ่ม”

match และ captures คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การจับคู่และการจับกลุ่ม” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม

ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ลิเทอรัลนิพจน์ปกติ
  2. การจับคู่และการจับกลุ่ม
  3. การแทนที่
  4. กลุ่มที่ตั้งชื่อและจุดยึด
← กลับไปที่ Ruby Academy