string.find()
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 37 trên 54.
Bây giờ bạn đã hiểu về các lớp ký tự, bạn có thể dùng chúng với string.find() để tìm kiếm mẫu thay vì văn bản chính xác. Điều này mở ra nhiều khả năng hữu ích để xác thực và phân tích văn bản.
Hàm string.find() hoạt động với mẫu theo cách giống như với chuỗi ký tự nguyên văn. Hàm trả về vị trí khớp đầu tiên với mẫu:
local text = "User123"
local position = string.find(text, "%d")
print(position) -- Đầu ra: 5Phần này tìm chữ số đầu tiên trong chuỗi, nằm ở vị trí 5. Bạn cũng có thể tìm kiếm điều ngược lại bằng cách dùng lớp ký tự (character class) chữ hoa:
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- Đầu ra: 1Ở đây, %D khớp với mọi ký tự không phải chữ số, nên nó tìm thấy chữ cái đầu tiên ở vị trí 1.
Một tác vụ xác thực thường gặp là kiểm tra xem chuỗi có bắt đầu bằng một mẫu cụ thể hay không. Bạn có thể dùng neo ^ ở đầu mẫu để chỉ khớp tại đầu chuỗi:
local username = "player42"
local startsWithLetter = string.find(username, "^%a")
if startsWithLetter then
print("Valid username")
else
print("Username must start with a letter")
endMẫu này kiểm tra xem chuỗi có bắt đầu bằng một chữ cái hay không, nên rất hữu ích khi xác thực đầu vào cần tuân theo một định dạng nhất định.
Thử thách
DễViết một hàm (function) startsWithLetter nhận text và trả về kết quả cho biết chuỗi (string) có bắt đầu bằng một chữ cái hay không.
Dùng string.find() với ký hiệu neo ^ và lớp ký tự %a để kiểm tra xem chuỗi có bắt đầu bằng một chữ cái hay không.
Tham số:
text(chuỗi): Chuỗi cần xác thực
Giá trị trả về: true nếu chuỗi bắt đầu bằng một chữ cái, nếu không thì trả về false (kiểu boolean)
Tự làm thử
function startsWithLetter(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