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: 100Mẫ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.
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
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
4Giới thiệu về metatable
Metatable là gì?setmetatable và getmetatableMetamethod __indexMetamethod __newindexMetamethod __tostringMetamethod số học phần 1Metamethod số học phần 2Ôn tập: bảng chỉ đọc7Thao tác chuỗi nâng cao
string.gsub() để thay thếGiới thiệu mẫu chuỗistring.find()string.match()Lặp với string.gmatch()Ôn tập: trình phân tích tệp nhật ký2Các hàm khác của thư viện table
table.concat()Tạo table và unpack()table.sort()Sắp xếp tùy chỉnh bằng hàmÔn tập: Bảng điểm cao5Dự án: Bộ máy trò chơi phiêu lưu bằng văn bản
Thiết lập dự án: Căn phòngLiên kết các phòngTự luyện tập: Trình biên dịch Lua online