Iterowanie za pomocą string.gmatch()
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 39 z 54.
Podczas gdy string.match() znajduje pierwsze wystąpienie wzorca, co zrobić, jeśli chcesz znaleźć wszystkie dopasowania w ciągu znaków? Funkcja string.gmatch() rozwiązuje ten problem, zwracając iterator, którego możesz użyć w pętli for, aby przetwarzać każde dopasowanie po kolei.
Podstawowa składnia wygląda tak:
for match in string.gmatch(text, pattern) do
-- przetwórz każde dopasowanie
endOto przykład, który znajduje wszystkie liczby w ciągu znaków:
local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
print(number)
end
-- Wynik:
-- 3
-- 5Wzorzec %d+ dopasowuje jedną lub więcej cyfr, a pętla wykonuje się raz dla każdej znalezionej liczby.
Możesz też wyodrębnić wszystkie słowa ze zdania:
local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- Wynik:
-- Lua
-- is
-- a
-- powerful
-- languageWyzwanie
ŁatwyNapisz funkcję extractHashtags, która przyjmuje text i zwraca wszystkie hashtagi znalezione w tekście, każdy w osobnym wierszu.
Użyj string.gmatch(), aby znaleźć wszystkie hashtagi w tekście. Hashtag zaczyna się od #, po którym występuje co najmniej jedna litera.
Logika:
- Użyj
string.gmatch()ze wzorcem"#%a+", aby znaleźć wszystkie hashtagi - Przejdź przez każde dopasowanie i zbierz je
- Połącz wszystkie hashtagi znakami nowej linii (
\n) - Jeśli nie znaleziono hashtagów, zwróć pusty ciąg znaków
Parametry:
text(string): Tekst, w którym należy wyszukać hashtagi
Zwraca: Wszystkie znalezione hashtagi, każdy w osobnym wierszu. Jeśli nie ma hashtagów, zwróć pusty ciąg znaków (string)
Spróbuj swoich sił
function extractHashtags(text)
-- Wpisz kod tutaj
end
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane iterowanie po tabelach
Iterowanie za pomocą pairs()Iterowanie za pomocą ipairs()pairs() a ipairs()Powtórka — karta postaci4Wprowadzenie do metatabel
Czym jest metatabela?setmetatable i getmetatableMetametoda __indexMetametoda __newindexMetametoda __tostringMetamეტody arytmetyczne — część 1Metamეტody arytmetyczne — część 2Podsumowanie — tabela tylko do odczytu7Zaawansowana obróbka ciągów znaków
string.gsub() do podstawianiaWprowadzenie do wzorców ciągów znakówstring.find()string.match()Iterowanie za pomocą string.gmatch()Podsumowanie – parser plików dziennika2Więcej funkcji biblioteki table
table.concat()Tworzenie tabel i unpack()table.sort()Sortowanie niestandardowe za pomocą funkcjiPodsumowanie — tablica najlepszych wyników5Projekt: silnik tekstowej gry przygodowej
Konfiguracja projektu: pokójŁączenie pokoiPoćwicz samodzielnie: Kompilator Lua online