Wprowadzenie do wzorców ciągów znaków
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 36 z 54.
W poprzedniej lekcji użyto string.gsub() do wyszukiwania dokładnego tekstu, takiego jak spacje lub konkretne słowa. Ale co, jeśli trzeba znaleźć „dowolną cyfrę” lub „dowolną literę”, nie znając dokładnego znaku? W tym przypadku przydają się wzorce tekstowe.
Wzorce ciągów znaków w Lua pozwalają opisać, jakiego rodzaju tekstu szukasz, zamiast podawać jego dokładną treść. Są prostsze niż wyrażenia regularne, ale wystarczająco zaawansowane do większości zadań związanych z przetwarzaniem tekstu.
Lua udostępnia specjalne kody nazywane klasami znaków, które dopasowują kategorie znaków. Oto najczęściej używane:
%d -- dopasowuje dowolną cyfrę (0-9)
%a -- dopasowuje dowolną literę (a-z, A-Z)
%s -- dopasowuje dowolny biały znak (spację, tabulator, znak nowej linii)
%w -- dopasowuje dowolny znak alfanumeryczny (literę lub cyfrę)
%p -- dopasowuje dowolny znak interpunkcyjnyOto, jak możesz użyć tych wzorców wraz z string.find(), aby znaleźć pierwszą cyfrę w ciągu znaków:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Wynik: 6Możesz też używać wielkich liter tych klas, aby dopasować przeciwieństwo. Na przykład %D dopasowuje każdy znak, który nie jest cyfrą, a %A dopasowuje każdy znak, który nie jest literą.
Wyzwanie
ŁatwyNapisz funkcję containsDigit, która przyjmuje text i zwraca informację, czy tekst zawiera co najmniej jedną cyfrę.
Użyj string.find() z klasą znaków %d, aby sprawdzić, czy w ciągu znaków występuje jakakolwiek cyfra.
Parametry:
text(string): Tekst, w którym należy sprawdzić obecność cyfr
Zwraca: true, jeśli tekst zawiera co najmniej jedną cyfrę, w przeciwnym razie false (boolean)
Spróbuj swoich sił
function containsDigit(text)
-- Napisz 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