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

ลิเทอรัลนิพจน์ปกติ

พื้นฐานรูปแบบ

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

นิพจน์ทั่วไปคืออะไร

นิพจน์ทั่วไป (regex) คือรูปแบบที่ใช้จับคู่ข้อความ ในภาษา Ruby นิพจน์ทั่วไปเป็นอ็อบเจ็กต์ชั้นหนึ่งของคลาส Regexp

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

  • จับคู่คำ ตัวเลข หรือสัญลักษณ์
  • ตรวจสอบความถูกต้องของอีเมลและหมายเลขโทรศัพท์
  • ดึงส่วนต่าง ๆ จากข้อความที่ไม่เป็นระเบียบ
pattern = /hello/
puts pattern.class
puts(pattern.match?('hello world'))

ลิเทอรัลนิพจน์ทั่วไปด้วยเครื่องหมายทับ

วิธีเขียนนิพจน์ทั่วไปที่ใช้กันบ่อยที่สุดในภาษา Ruby คือเขียนไว้ระหว่างเครื่องหมายทับไปข้างหน้าสองตัว: /pattern/

สิ่งนี้เรียกว่าลิเทอรัลนิพจน์ทั่วไป ทุกอย่างที่อยู่ระหว่างเครื่องหมายทับคือลวดลาย

ruby = /ruby/
puts ruby.class
puts(ruby.match?('I love ruby'))
puts(ruby.match?('I love python'))

ตัวดำเนินการจับคู่ =~

ตัวดำเนินการ =~ ใช้ทดสอบสตริงกับนิพจน์ทั่วไป โดยจะคืนค่าดัชนีของ first match หรือไม่มีค่าหากไม่มี match

puts('hello world' =~ /world/)
puts(('hello world' =~ /xyz/).inspect)

ใช้ match? เมื่อต้องการคำตอบแบบบูลีน

เมื่อคุณต้องการเพียงคำตอบใช่หรือไม่ ให้ใช้ match? เมธอดนี้คืนค่า true หรือ false และทำงานได้เร็วกว่า เพราะไม่สร้างอ็อบเจ็กต์ MatchData

puts(/\d/.match?('abc123'))
puts(/\d/.match?('abcdef'))

คลาสอักขระ

คลาสอักขระที่อยู่ในวงเล็บเหลี่ยมจะจับคู่อักขระหนึ่งตัวใด ๆ จากชุดที่กำหนด

  • [abc] จับคู่ a, b หรือ c
  • [a-z] จับคู่ตัวอักษรพิมพ์เล็กใด ๆ
  • [0-9] จับคู่ตัวเลขใด ๆ
puts(/[aeiou]/.match?('sky'))
puts(/[aeiou]/.match?('tree'))
puts(/[0-9]/.match?('room 7'))

คลาสรูปแบบย่อ

Ruby มีอักขระหลีกแบบย่อสำหรับคลาสอักขระที่ใช้บ่อย:

  • \d หมายถึงตัวเลข, \D หมายถึงอักขระที่ไม่ใช่ตัวเลข
  • \w หมายถึงอักขระในคำ (ตัวอักษร ตัวเลข และขีดล่าง)
  • \s หมายถึงช่องว่าง, \S หมายถึงอักขระที่ไม่ใช่ช่องว่าง
puts(/\d\d/.match?('age 42'))
puts(/\w+/.match?('hello_99'))
puts(/\s/.match?('no_space'))

จุดและตัวระบุจำนวน

จุด . จับคู่อักขระใด ๆ หนึ่งตัว (ยกเว้นอักขระขึ้นบรรทัดใหม่) ตัวระบุจำนวนใช้ควบคุมการทำซ้ำ:

  • * ไม่มีครั้งหนึ่งหรือมากกว่า
  • + หนึ่งครั้งหรือมากกว่า
  • ? ไม่มีครั้งหรือหนึ่งครั้ง
  • {2,4} ตั้งแต่ 2 ถึง 4 ครั้ง
puts(/ab+c/.match?('abbbc'))
puts(/colou?r/.match?('color'))
puts(/\d{3}/.match?('id 451'))

การเลือกทางเลือกด้วยเครื่องหมายไปป์

เครื่องหมายไปป์ | หมายถึง OR รูปแบบ cat|dog จับคู่คำใดคำหนึ่งจากสองคำนี้

ใช้วงเล็บเพื่อจัดกลุ่มการเลือกทางเลือกไว้ภายในรูปแบบที่ใหญ่กว่า

pet = /cat|dog/
puts(pet.match?('I have a dog'))
puts(pet.match?('I have a fish'))
puts(/^(yes|no)$/.match?('yes'))

แฟล็กที่ไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก

เพิ่มแฟล็ก i หลังเครื่องหมายทับปิด เพื่อให้การจับคู่ไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก

แฟล็กอื่นที่มีประโยชน์ ได้แก่ m (จุดจับคู่กับอักขระขึ้นบรรทัดใหม่) และ x (รูปแบบขยาย ซึ่งไม่สนใจช่องว่าง)

puts(/ruby/i.match?('I love RUBY'))
puts(/ruby/.match?('I love RUBY'))

การสร้างนิพจน์ทั่วไปจากสตริง

คุณสามารถสร้างนิพจน์ทั่วไปขณะทำงานด้วย Regexp.new ใช้ Regexp.escape เพื่อใส่ข้อมูลเข้าจากผู้ใช้อย่างปลอดภัยเมื่อข้อมูลนั้นอาจมีอักขระพิเศษ

word = 'price'
pattern = Regexp.new(word)
puts(pattern.match?('the price is high'))
puts(Regexp.escape('a.b*c'))

แนะนำจุดยึด

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

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

คุณจะศึกษาเรื่องเหล่านี้อย่างละเอียดในภายหลัง

puts(/^Hello/.match?('Hello there'))
puts(/world$/.match?('hello world'))

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

ตัวดำเนินการ =~ คืนค่าอะไรเมื่อ regex จับคู่กับสตริง

สรุปทบทวน: ลิเทอรัลนิพจน์ทั่วไป

คุณได้เรียนรู้พื้นฐานของนิพจน์ทั่วไปใน Ruby ดังนี้:

  • ลิเทอรัลนิพจน์ทั่วไปเขียนไว้ระหว่าง /slashes/
  • =~ คืนค่าดัชนี ส่วน match? คืนค่า true/false
  • คลาสอักขระ [ ] และรูปแบบย่อ \d \w \s
  • ตัวระบุจำนวน * + ? {n,m} และการเลือกทางเลือก |
  • แฟล็ก i ทำให้การจับคู่ไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก

ถัดไป คุณจะเรียนรู้การเก็บส่วนที่จับคู่ได้

puts(/\w+@\w+\.\w+/i.match?('USER@Mail.com'))

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

บทเรียน “ลิเทอรัลนิพจน์ปกติ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ลิเทอรัลนิพจน์ปกติ”

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

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

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

บทเรียน “ลิเทอรัลนิพจน์ปกติ” ใช้เวลานานแค่ไหน

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

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

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

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

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