การแทนที่
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ