การจับกลุ่มและ 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.comstring.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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ไวยากรณ์รูปแบบ Lua
- การจับกลุ่มและ string.match
- string.gmatch สำหรับการแยกโทเคน
- string.gsub สำหรับการแปลง