Lặp với string.gmatch()
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 39 trên 54.
string.match() tìm lần xuất hiện đầu tiên của một mẫu, nhưng nếu bạn cần tìm tất cả kết quả khớp trong một chuỗi thì sao? Hàm string.gmatch() giải quyết việc này bằng cách trả về một trình lặp mà bạn có thể dùng trong vòng lặp for để xử lý từng kết quả khớp.
Cú pháp cơ bản như sau:
for match in string.gmatch(text, pattern) do
-- xử lý từng match
endĐây là ví dụ tìm tất cả các số trong một chuỗi:
local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
print(number)
end
-- Đầu ra:
-- 3
-- 5Mẫu %d+ khớp với một hoặc nhiều chữ số, và vòng lặp chạy một lần cho mỗi số tìm được.
Bạn cũng có thể trích xuất tất cả các từ trong một câu:
local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- Đầu ra:
-- Lua
-- is
-- a
-- powerful
-- languageThử thách
DễViết một hàm (function) extractHashtags nhận text và trả về tất cả hashtag tìm thấy trong văn bản, mỗi hashtag trên một dòng riêng.
Dùng string.gmatch() để tìm tất cả hashtag trong văn bản. Hashtag bắt đầu bằng #, theo sau là một hoặc nhiều chữ cái.
Logic:
- Dùng
string.gmatch()với mẫu"#%a+"để tìm tất cả hashtag - Lặp qua từng kết quả khớp và thu thập chúng
- Nối tất cả hashtag bằng ký tự xuống dòng (
\n) - Nếu không tìm thấy hashtag nào, hãy trả về chuỗi rỗng
Tham số:
text(chuỗi): Văn bản cần tìm hashtag
Giá trị trả về: Tất cả hashtag tìm thấy, mỗi hashtag trên một dòng riêng. Nếu không có hashtag nào, hãy trả về chuỗi rỗng (chuỗi)
Tự làm thử
function extractHashtags(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