Mục lục
📚 Giới thiệu về So khớp Mẫu Lua: Hướng Dẫn Toàn Diện
Lua là một ngôn ngữ kịch bản mạnh mẽ, hiệu quả, nhẹ và dễ nhúng. Một trong những tính năng ít được biết đến nhưng vô cùng hữu ích của Lua là so khớp mẫu (pattern matching). So khớp mẫu trong Lua tương tự như biểu thức chính quy trong các ngôn ngữ lập trình khác nhưng có cú pháp đơn giản và dễ hiểu hơn.
🎯 Trong bài viết này, chúng ta sẽ khám phá những kiến thức cơ bản về so khớp mẫu trong Lua và cách sử dụng hiệu quả.
🔍 Tìm hiểu về Mẫu Lua
Mẫu trong Lua là một cách để mô tả cấu trúc của chuỗi. Chúng được sử dụng trong các hàm xử lý chuỗi như string.match, string.find, string.gmatch và string.gsub. Mẫu là một loại biểu thức chính quy nhưng đơn giản hơn và kém mạnh mẽ hơn.
🧱 Các Thành Phần Mẫu Cơ Bản
🧩 Lớp Ký Tự (Character Classes)
Ký hiệu | Ý nghĩa |
. | Khớp với bất kỳ ký tự nào trừ xuống dòng |
%a | Khớp với chữ cái (a-z, A-Z) |
%c | Ký tự điều khiển |
%d | Chữ số (0-9) |
%l | Chữ thường |
%u | Chữ in hoa |
%p | Dấu câu |
%s | Khoảng trắng |
%w | Chữ hoặc số |
%x | Chữ số thập lục phân |
🛠 Bộ Điều Chỉnh (Modifiers)
Ký hiệu | Ý nghĩa |
+ | Một hoặc nhiều lần lặp lại |
* | Không hoặc nhiều lần lặp lại |
- | Không hoặc nhiều lần (không tham lam) |
? | Không hoặc một lần |
📌 Điểm Neo (Anchors)
Ký hiệu | Ý nghĩa |
^ | Neo vào đầu chuỗi |
$ | Neo vào cuối chuỗi |
⚠️ Ký Tự Thoát (Escapes)
Ký hiệu | Ý nghĩa |
% | Thoát ký tự có ý nghĩa đặc biệt |
🛠️ Các Hàm Mẫu Thường Dùng
🔎 string.match
Hàm string.match được sử dụng để tìm chuỗi con khớp với một mẫu nhất định. Nó trả về kết quả khớp đầu tiên được tìm thấy.
local s = "Hello, Lua!" local match = string.match(s, "%a+") print(match) -- Output: Hello
🧭 string.find
Hàm string.find tương tự như hàm string.match nhưng trả về chỉ số bắt đầu và kết thúc của kết quả khớp.
local s = "Hello, Lua!" local start_idx, end_idx = string.find(s, "Lua") print(start_idx, end_idx) -- Output: 8 10
🔁 string.gmatch
Hàm string.gmatch được sử dụng để lặp lại tất cả các kết quả khớp trong một chuỗi.
local s = "one, two, three" for word in string.gmatch(s, "%a+") do print(word) end -- Output: -- one -- two -- three
🧹 string.gsub
Hàm string.gsub được sử dụng để thay thế các lần xuất hiện của một mẫu bằng một chuỗi thay thế.
local s = "Hello, Lua!" local result = string.gsub(s, "Lua", "World") print(result) -- Output: Hello, World!
💡 Ví Dụ Thực Tế
Chúng ta hãy xem một vài ví dụ thực tế để củng cố sự hiểu biết của chúng ta.
🗓 Trích Xuất Ngày từ Chuỗi
local text = "Today's date is 2024-06-13 and tomorrow's date is 2024-06-14." for date in string.gmatch(text, "%d%d%d%d%-%d%d%-%d%d") do print(date) end -- Output: -- 2024-06-13 -- 2024-06-14
📧 Xác Thực Địa Chỉ Email
local email = "example@example.com" local pattern = "^[%w._%+-]+@[%w.-]+%.%a%a+$" if string.match(email, pattern) then print("Valid email address") else print("Invalid email address") end
🏁 Kết Luận
🧠 So khớp mẫu của Lua là một công cụ mạnh mẽ và đơn giản để xử lý chuỗi.
📏 Dù không mạnh như biểu thức chính quy đầy đủ, nhưng dễ dùng và phù hợp với đa số nhu cầu.
🎯 Nắm vững các thành phần cơ bản và hàm sẽ giúp bạn xử lý nhiều tình huống với chuỗi trong Lua một cách hiệu quả.
✍️ Hãy thực hành và thử nghiệm! Chúc bạn lập trình vui vẻ nhé! 🚀