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