กลุ่มที่ตั้งชื่อและจุดยึด
นิพจน์ปกติขั้นสูง
กลุ่มที่ตั้งชื่อและจุดยึด เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ลิเทอรัลนิพจน์ปกติ
- การจับคู่และการจับกลุ่ม
- การแทนที่
- กลุ่มที่ตั้งชื่อและจุดยึด