string.find()
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 37 z 54.
Teraz, gdy rozumiesz klasy znaków, możesz używać ich z string.find(), aby wyszukiwać wzorce zamiast dokładnego tekstu. Otwiera to wiele możliwości walidacji i analizy tekstu.
Funkcja string.find() działa z wzorcami tak samo jak z ciągami znaków dosłownymi. Zwraca pozycję, w której wzorzec pasuje po raz pierwszy:
local text = "User123"
local position = string.find(text, "%d")
print(position) -- Wynik: 5To znajduje pierwszą cyfrę w ciągu, która znajduje się na pozycji 5. Możesz też wyszukać przeciwieństwo, używając klas znaków zapisanych wielkimi literami:
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- Wynik: 1Tutaj %D dopasowuje dowolny znak niebędący cyfrą, więc znajduje pierwszą literę na pozycji 1.
Częstym zadaniem związanym z walidacją jest sprawdzanie, czy ciąg znaków zaczyna się od określonego wzorca. Możesz użyć kotwicy ^ na początku wzorca, aby dopasować go tylko na początku ciągu znaków:
local username = "player42"
local startsWithLetter = string.find(username, "^%a")
if startsWithLetter then
print("Valid username")
else
print("Username must start with a letter")
endTen wzorzec sprawdza, czy ciąg znaków zaczyna się od litery, dzięki czemu jest przydatny do walidacji danych wejściowych, gdy wymagane są określone formaty.
Aby znaleźć sam znak specjalny, na przykład kropkę, poprzedź go znakiem % albo wyłącz wzorce, używając wyszukiwania dosłownego (1, aby rozpocząć od pierwszego znaku, true dla wyszukiwania dosłownego):
print(string.find("v1.5", "%.")) -- Wynik: 3 3
print(string.find("v1.5", ".", 1, true)) -- Wynik: 3 3
print(string.find("v1.5", ".")) -- Wynik: 1 1 (. pasuje do dowolnego znaku)Wyzwanie
ŁatwyNapisz funkcję startsWithLetter, która przyjmuje text i zwraca informację, czy ciąg znaków zaczyna się od litery.
Użyj string.find() z kotwicą ^ i klasą znaków %a, aby sprawdzić, czy ciąg znaków zaczyna się od litery.
Parametry:
text(string): Ciąg znaków do sprawdzenia
Zwraca: true, jeśli ciąg znaków zaczyna się od litery, w przeciwnym razie false (wartość logiczna)
Spróbuj swoich sił
function startsWithLetter(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