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

การแทนที่

gsub กับรูปแบบ

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

การแทนที่ข้อความด้วย sub

String#sub แทนที่ match first ของรูปแบบด้วยสตริงทดแทน สตริงเดิมจะไม่ถูกเปลี่ยนแปลง และจะคืนค่าสตริงใหม่

s = 'hello world'
puts(s.sub(/world/, 'Ruby'))
puts s

การแทนที่ทั้งหมดด้วย gsub

gsub หมายถึงการแทนที่ทั่วทั้งสตริง โดยจะแทนที่ match ทุกตัว ไม่ใช่เพียงตัวแรก

puts('a-b-c-d'.gsub(/-/, '_'))
puts('one two two'.gsub(/two/, 'three'))

รูปแบบในการแทนที่

อาร์กิวเมนต์ตัวแรกของ gsub อาจเป็นนิพจน์ทั่วไปแบบเต็ม ทำให้คุณจับคู่รูปแบบที่ยืดหยุ่นได้แทนข้อความตายตัว

puts('id42 id7 id100'.gsub(/\d+/, '#'))
puts('a1b2c3'.gsub(/[0-9]/, '*'))

การอ้างอิงย้อนกลับในข้อความทดแทน

ในสตริงทดแทน คุณสามารถอ้างถึงกลุ่มที่จับข้อมูลได้ด้วย \1, \2 และหมายเลขถัดไป

puts('2026-05-30'.gsub(/(\d{4})-(\d{2})-(\d{2})/, '\3/\2/\1'))

การอ้างอิงย้อนกลับไปยัง match ทั้งหมด

\0 หรือ \& หมายถึงข้อความที่จับคู่ได้ทั้งหมด ซึ่งมีประโยชน์สำหรับการครอบ match

puts('cat dog'.gsub(/\w+/, '[\0]'))

รูปแบบบล็อกของ gsub

gsub ยอมรับบล็อก โดยจะส่ง match แต่ละตัวเข้าไป และค่าที่บล็อกคืนจะกลายเป็นข้อความทดแทน วิธีนี้ทำให้คุณคำนวณข้อความทดแทนแบบไดนามิกได้

result = 'a1 b2 c3'.gsub(/\d/) { |d| (d.to_i * 10).to_s }
puts result

การเปลี่ยน match เป็นตัวพิมพ์ใหญ่

รูปแบบบล็อกช่วยให้การแปลงทำได้ง่าย ในตัวอย่างนี้ เราเปลี่ยนตัวอักษรแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่

title = 'the great escape'.gsub(/\w+/) { |w| w.capitalize }
puts title

การแทนที่ด้วยแฮช

หากส่งแฮชเป็นอาร์กิวเมนต์ตัวที่สอง ระบบจะค้นหา match แต่ละตัวในฐานะคีย์ แล้วแทนที่ด้วยค่าของคีย์นั้น เหมาะสำหรับตารางแปลภาษา

map = { 'cat' => 'kedi', 'dog' => 'kopek' }
puts('cat and dog'.gsub(/cat|dog/, map))

รูปแบบที่แก้ไขสตริงเดิม

sub! และ gsub! แก้ไขสตริงโดยตรงและคืนค่า nil หากไม่มีการเปลี่ยนแปลง

s = 'hello'
s.gsub!(/l/, 'L')
puts s
puts(s.gsub!(/z/, 'x').inspect)

การลบข้อความ

หากต้องการลบ match ให้แทนที่ด้วยสตริงว่าง

puts('h e l l o'.gsub(/\s/, ''))
puts('price: $42'.gsub(/[^0-9]/, ''))

การอ้างอิงย้อนกลับไปยังกลุ่มที่ตั้งชื่อ

คุณสามารถตั้งชื่อกลุ่มด้วย (?<name>...) และอ้างถึงกลุ่มนั้นในข้อความทดแทนโดยใช้ \k<name>

out = 'John Smith'.gsub(/(?<first>\w+) (?<last>\w+)/, '\k<last>, \k<first>')
puts out

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

ความแตกต่างระหว่าง sub และ gsub คืออะไร

สรุปทบทวน: การแทนที่

คุณได้เรียนรู้การแปลงสตริงด้วยรูปแบบต่าง ๆ ดังนี้:

  • sub แทนที่ match แรก ส่วน gsub แทนที่ match ทั้งหมด
  • การอ้างอิงย้อนกลับ \1, \& ในข้อความทดแทน
  • รูปแบบบล็อกใช้คำนวณข้อความทดแทนแบบไดนามิก
  • อาร์กิวเมนต์แฮชใช้จับคู่ match กับค่าต่าง ๆ
  • sub! / gsub! เปลี่ยนแปลงสตริงเดิมโดยตรง
puts('foo bar baz'.gsub(/b\w+/) { |w| w.upcase })

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

บทเรียน “การแทนที่” ฟรีหรือไม่

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

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

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

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

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

บทเรียน “การแทนที่” ใช้เวลานานแค่ไหน

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

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

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

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

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