Menu
CoddyTech

string.match()

Thuộc phần Logic và luồng chương trình trong hành trình Lua của Coddy. Bài học 38 trên 54.

Trong khi string.find() cho bạn biết mẫu xuất hiện ở đâu trong chuỗi, đôi khi bạn cần trích xuất chính văn bản khớp với mẫu. Đây là lúc string.match() phát huy tác dụng, và hàm này càng mạnh hơn khi kết hợp với các nhóm bắt.

Nhóm bắt giữ cho phép bạn đánh dấu những phần cụ thể trong mẫu mà bạn muốn trích xuất. Bạn tạo nhóm bắt giữ bằng cách đặt một phần của mẫu trong dấu ngoặc đơn (). Khi string.match() tìm thấy kết quả khớp, hàm sẽ trả về văn bản được bắt giữ thay vì chỉ trả về vị trí.

Đây là ví dụ đơn giản về cách trích xuất một số từ chuỗi:

local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number)  -- Đầu ra: 100

Mẫu %d+ có nghĩa là “một hoặc nhiều chữ số”. + là một bộ sửa đổi, khớp với một hoặc nhiều ký tự thuộc lớp ký tự đứng trước, cho phép bạn lấy các số có nhiều chữ số.

Bạn có thể dùng nhóm bắt để trích xuất các phần cụ thể của một mẫu phức tạp hơn:

local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username)  -- Đầu ra: Alice

Ở đây, dấu ngoặc đơn quanh %a+ cho Lua biết cần lấy chuỗi chữ cái xuất hiện sau "User: ". Phần còn lại của mẫu giúp xác định đúng vị trí, nhưng chỉ phần được lấy mới được trả về.

Nếu mẫu của bạn có nhiều nhóm bắt (capture), string.match() sẽ trả về tất cả các nhóm đó dưới dạng các giá trị riêng biệt, bạn có thể gán chúng cho nhiều biến cùng lúc.

challenge icon

Thử thách

Dễ

Viết một hàm extractPrice nhận text và trả về giá được tìm thấy trong chuỗi.

Dùng string.match() với mẫu bắt để trích xuất giá dạng số xuất hiện sau dấu đô la. Mẫu cần bắt một hoặc nhiều chữ số bằng %d+.

Tham số:

  • text (chuỗi): Một chuỗi chứa giá theo định dạng "Price: $XX"

Giá trị trả về: Giá dạng số dưới dạng chuỗi (chuỗi)

Tự làm thử

function extractPrice(text)
    -- Viết code ở đây
end
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch Lua online