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

กลุ่มที่ตั้งชื่อและจุดยึด

นิพจน์ปกติขั้นสูง

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

เหตุใดจึงต้องใช้กลุ่มที่ตั้งชื่อ

การอ้างอิงข้อมูลที่จับได้ด้วยหมายเลข เช่น m[1] จะอ่านเข้าใจได้ยากเมื่อรูปแบบมีขนาดใหญ่ขึ้น กลุ่มที่ตั้งชื่อจะกำหนดป้ายกำกับที่มีความหมายให้กับข้อมูลที่จับได้แต่ละส่วน

ไวยากรณ์: (?<name>pattern)

m = /(?<year>\d{4})-(?<month>\d{2})/.match('2026-05')
puts(m[:year])
puts(m[:month])

การเข้าถึงข้อมูลที่จับได้จากกลุ่มที่ตั้งชื่อ

เข้าถึงข้อมูลที่จับได้จากกลุ่มที่ตั้งชื่อด้วยคีย์ชนิดสัญลักษณ์หรือสตริง: m[:name] เมธอด named_captures จะคืนค่าข้อมูลทั้งหมดเป็นแฮช

m = /(?<user>\w+)@(?<host>\w+)/.match('alice@mail')
p m.named_captures

กลุ่มที่ตั้งชื่อร่วมกับ =~

เมื่อวางลิเทอรัลนิพจน์ทั่วไปที่มีกลุ่มที่ตั้งชื่อไว้ทางซ้ายของ =~ Ruby จะสร้างตัวแปรเฉพาะที่สำหรับแต่ละชื่อให้โดยอัตโนมัติ

if /(?<word>\w+)/ =~ 'hello'
  puts word
end

จุดยึด: จุดเริ่มต้นและจุดสิ้นสุด

จุดยึดใช้จับคู่ตำแหน่งแทนอักขระ:

  • ^ จุดเริ่มต้นของบรรทัด
  • $ จุดสิ้นสุดของบรรทัด

จุดยึดมีความสำคัญอย่างยิ่งสำหรับตรวจสอบว่าข้อมูลเข้าทั้งหมดตรงกับรูปแบบ

puts(/^abc/.match?('abcdef'))
puts(/def$/.match?('abcdef'))
puts(/^abc$/.match?('abcdef'))

จุดยึดสตริง \A และ \z

^ และ $ จับคู่ขอบเขตบรรทัด ซึ่งมีความสำคัญกับสตริงหลายบรรทัด สำหรับสตริงทั้งชุด ควรใช้ \A (จุดเริ่มต้น) และ \z (จุดสิ้นสุดจริง)

text = "first\nsecond"
puts(/^second/.match?(text))
puts(/\Asecond/.match?(text))

การตรวจสอบข้อมูลเข้าทั้งหมด

หากต้องการตรวจสอบว่าสตริงทั้งหมดตรงกับรูปแบบ ให้ใช้จุดยึดทั้งสองด้าน วิธีนี้จะปฏิเสธสตริงที่มีอักขระเกินมา

zip = /\A\d{5}\z/
puts(zip.match?('34000'))
puts(zip.match?('34000x'))

ขอบเขตคำ

\b คือขอบเขตคำ ซึ่งเป็นตำแหน่งระหว่างอักขระในคำกับอักขระที่ไม่ใช่อักขระในคำ โดยจะจับคู่คำทั้งหมดโดยไม่ใช้หรือบริโภคอักขระ

puts('cat catalog'.scan(/\bcat\b/).length)
puts('cat catalog'.scan(/cat/).length)

การมองไปข้างหน้า

การมองไปข้างหน้าแบบเป็นจริง (?=...) ใช้ยืนยันสิ่งที่จะอยู่ถัดไปโดยไม่รวมสิ่งนั้นไว้ใน match ส่วนการมองไปข้างหน้าแบบเป็นเท็จคือ (?!...)

puts('100 dollars'.match(/\d+(?= dollars)/)[0])
puts('apple pie'.match?(/apple(?! juice)/))

การมองย้อนกลับ

การมองย้อนกลับ (?<=...) ใช้ยืนยันสิ่งที่อยู่ก่อนหน้า match ส่วนการมองย้อนกลับแบบเป็นเท็จคือ (?<!...)

m = '$42'.match(/(?<=\$)\d+/)
puts(m[0])

กลุ่มที่ไม่เก็บข้อมูล

บางครั้งคุณต้องจัดกลุ่มเพื่อใช้การเลือกทางเลือกหรือตัวระบุจำนวน แต่ไม่ต้องการเก็บข้อมูลที่จับได้ ให้ใช้ (?:...) สำหรับกลุ่มที่ไม่เก็บข้อมูล

m = /(?:Mr|Ms)\. (\w+)/.match('Ms. Lee')
p m.captures

การนำทุกอย่างมารวมกัน

ตัวตรวจสอบรูปแบบที่ใช้งานจริงจะใช้จุดยึด กลุ่มที่ตั้งชื่อ และตัวระบุจำนวนร่วมกัน

re = /\A(?<area>\d{3})-(?<num>\d{4})\z/
m = re.match('555-1234')
puts(m[:area])
puts(m[:num])

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

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

สรุปทบทวน: กลุ่มที่ตั้งชื่อและจุดยึด

คุณใช้เครื่องมือนิพจน์ทั่วไปขั้นสูงได้อย่างชำนาญแล้ว:

  • กลุ่มที่ตั้งชื่อ (?<name>...) และ named_captures
  • จุดยึด ^ $ \A \z \b
  • การมองไปข้างหน้า (?=) / (?!) และการมองย้อนกลับ (?<=) / (?<!)
  • กลุ่มที่ไม่เก็บข้อมูล (?:...)
puts(/\A(?<id>\d+)\z/.match('42')[:id])

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

บทเรียน “กลุ่มที่ตั้งชื่อและจุดยึด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “กลุ่มที่ตั้งชื่อและจุดยึด”

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

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

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

บทเรียน “กลุ่มที่ตั้งชื่อและจุดยึด” ใช้เวลานานแค่ไหน

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

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

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

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

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