Menu
CoddyTech

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
-- 5

Mẫ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
-- language
challenge icon

Thử 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
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