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

การจับกลุ่มและ string.match

ดึงกลุ่มที่จับได้จากข้อความด้วย string.match และการจับด้วย ()

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

ค่าที่จับได้คืออะไร

ค่าที่จับได้คือรูปแบบย่อยในวงเล็บของรูปแบบ Lua ซึ่งใช้ดึงสตริงย่อยออกจากข้อความที่ตรงกัน

string.match กับค่าที่จับได้

เมื่อรูปแบบมีค่าที่จับได้ string.match จะส่งคืนสตริงย่อยที่จับได้แทนที่จะส่งคืนผลการจับคู่ทั้งหมด

local date = "2025-01-15"
local y, m, d = date:match("(%d+)-(%d+)-(%d+)")
print(y, m, d)  -- 2025  01  15

การจับค่าเดียว

การจับค่าเดียวจะส่งคืนค่าสตริงหนึ่งค่า

local s = "name: Alice"
local name = s:match("name: (%a+)")
print(name)  -- Alice

การจับค่าหลายค่า

การจับค่าหลายค่าจะส่งคืนเป็นหลายค่า

local pair = "key = value"
local k, v = pair:match("(%w+)%s*=%s*(%w+)")
print(k, v)  -- key  value

การจับตำแหน่ง ()

การจับค่าว่าง () จะจับตำแหน่งปัจจุบันในสตริงเป็นตัวเลข

local s = "hello world"
local pos = s:match("()world")
print(pos)  -- 7 (position where world starts)

ค่าที่จับได้แบบไม่บังคับ

จับส่วนที่ไม่บังคับโดยใส่ ? ต่อท้ายกลุ่มที่ต้องการจับ

local s = "http://example.com"
local protocol, host = s:match("(https?)://([^/]+)")
print(protocol, host)  -- http  example.com

string.find กับค่าที่จับได้

string.find ที่ใช้กับค่าที่จับได้จะส่งคืนจุดเริ่มต้น จุดสิ้นสุด แล้วจึงตามด้วยสตริงย่อยที่จับได้

local s = "phone: 555-1234"
local i, j, num = s:find("phone: (%d+-%d+)")
print(i, j, num)  -- 1  16  555-1234

ค่าที่จับได้แบบซ้อนกัน

ค่าที่จับได้สามารถซ้อนกันได้ โดยจะกำหนดหมายเลขจากซ้ายไปขวาตามลำดับวงเล็บเปิด

local s = "2025-01-15"
local full, year = s:match("((%d%d%d%d)-%d%d-%d%d)")
print(full, year)  -- 2025-01-15  2025

แนวทางปฏิบัติที่ดีสำหรับค่าที่จับได้

ใช้ตัวแปรตามรูปแบบการตั้งชื่อที่สื่อความหมายเพื่อให้อ่านง่าย อย่าซ้อนค่าที่จับได้มากเกินไป หากจับคู่ไม่สำเร็จจะส่งคืน nil ดังนั้นให้ตรวจสอบก่อนใช้ค่าที่จับได้เสมอ

local result = s:match("(%d+)")
if result then print("found:", result)
else print("no match") end

การจับคู่ที่อยู่อีเมล

รูปแบบอีเมลอย่างง่าย (ไม่สอดคล้องกับมาตรฐาน RFC) ที่มีค่าที่จับได้

local email = "user@example.com"
local user, domain = email:match("([^@]+)@(.+)")
print(user, domain)  -- user  example.com

ตารางผลการจับคู่ทั้งหมด

หากต้องการรวบรวมผลการจับคู่ทั้งหมดไว้ในตาราง ให้ใช้ string.gmatch (จะกล่าวถึงในบทเรียนถัดไป)

คำถามเกี่ยวกับค่าที่จับได้

"2025-01-15":match("(%d+)-(%d+)-(%d+)") ส่งคืนค่าอะไร

สรุป: ค่าที่จับได้และ string.match

ใช้ () ในรูปแบบเพื่อดึงสตริงย่อยออกมา string.match ส่งคืนค่าที่จับได้โดยตรง ส่วน () ว่างจะจับตำแหน่ง ต้องตรวจสอบผลการจับคู่ว่าเป็น nil เสมอ

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

บทเรียน “การจับกลุ่มและ string.match” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การจับกลุ่มและ string.match”

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

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

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

บทเรียน “การจับกลุ่มและ string.match” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ไวยากรณ์รูปแบบ Lua
  2. การจับกลุ่มและ string.match
  3. string.gmatch สำหรับการแยกโทเคน
  4. string.gsub สำหรับการแปลง
← กลับไปที่ Lua Academy