Giới thiệu mẫu chuỗi
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 36 trên 54.
Ở bài học trước, bạn đã dùng string.gsub() để tìm văn bản chính xác như dấu cách hoặc từ cụ thể. Nhưng nếu bạn cần tìm «bất kỳ chữ số nào» hoặc «bất kỳ chữ cái nào» mà không biết chính xác ký tự thì sao? Đây là lúc các mẫu chuỗi phát huy tác dụng.
Mẫu chuỗi trong Lua giúp mô tả loại văn bản bạn đang tìm, thay vì chính xác văn bản đó. Chúng đơn giản hơn biểu thức chính quy nhưng đủ mạnh cho hầu hết các tác vụ xử lý văn bản.
Lua cung cấp các mã đặc biệt gọi là lớp ký tự, dùng để khớp với các nhóm ký tự. Dưới đây là những lớp phổ biến nhất:
%d -- khớp với mọi chữ số (0-9)
%a -- khớp với mọi chữ cái (a-z, A-Z)
%s -- khớp với mọi ký tự khoảng trắng (character) (dấu cách, tab, xuống dòng)
%w -- khớp với mọi ký tự chữ hoặc số (chữ cái và chữ số)
%p -- khớp với mọi ký tự dấu câuĐây là cách bạn có thể dùng các mẫu này với string.find() để tìm chữ số đầu tiên trong chuỗi:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Đầu ra: 6Bạn cũng có thể dùng các phiên bản viết hoa của những lớp này để khớp với phần ngược lại. Ví dụ: %D khớp với mọi ký tự không phải chữ số, còn %A khớp với mọi ký tự không phải chữ cái.
Thử thách
DễViết một hàm (function) containsDigit nhận text và trả về liệu văn bản có chứa ít nhất một chữ số hay không.
Dùng string.find() với lớp ký tự %d để kiểm tra xem chuỗi có chữ số nào không.
Tham số:
text(chuỗi): Văn bản cần kiểm tra chữ số
Giá trị trả về: true nếu văn bản chứa ít nhất một chữ số, nếu không thì trả về false (kiểu boolean)
Tự làm thử
function containsDigit(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