Menu
CoddyTech

string.find()

Część sekcji Podstawy ścieżki Lua w Coddy. Lekcja 48 z 90.

Funkcja string.find() to potężne narzędzie do wyszukiwania w ciągach znaków. Pozwala znaleźć krótszy ciąg znaków (nazywany wzorcem) w dłuższym ciągu znaków i dokładnie wskazuje, gdzie go znaleziono.

Oto podstawowa składnia:

string.find(text, pattern)

Gdy string.find() pomyślnie znajdzie wzorzec, zwraca dwie liczby: pozycję początkową i końcową dopasowania. Jeśli wzorzec nie zostanie znaleziony, zwraca nil.

Oto prosty przykład:

local sentence = "The treasure is hidden here"
local start_pos, end_pos = string.find(sentence, "treasure")
print(start_pos, end_pos)  -- wypisuje: 5 12

W tym przykładzie słowo „treasure” zaczyna się na pozycji 5 i kończy na pozycji 12 w zdaniu.

Warto wiedzieć, że wyszukiwany tekst to wzorzec, a nie zwykły tekst. Kilka znaków ma w wzorcach specjalne znaczenie: . % - + * ? [ ] ^ $ ( ). Poznasz je później w kursie. Litery, cyfry i spacje dopasowują same siebie, tak jak w powyższym przykładzie, ale znak specjalny może dopasować więcej, niż zamierzono:

print(string.find("Score: 105", "1.5"))  -- wypisuje: 8 10 (znak . dopasował się do 0)

Aby wyszukać tekst dokładnie w takiej postaci, w jakiej został zapisany, dodaj jeszcze dwa argumenty: 1 (rozpocznij od pierwszego znaku) i true (zwykłe wyszukiwanie, bez znaków specjalnych):

print(string.find("Score: 105", "1.5", 1, true))   -- zwraca: nil
print(string.find("Version 1.5", "1.5", 1, true))  -- zwraca: 9 11
challenge icon

Wyzwanie

Łatwy

Utwórz wykrywacz tajnych wiadomości, który wyszukuje ukryte słowo kodowe w dłuższej wiadomości tekstowej. Zadeklaruj zmienną o nazwie message i przypisz jej wartość "The ancient treasure lies beneath the old oak tree". Użyj funkcji string.find(), aby wyszukać w wiadomości słowo "treasure" i zapisać pozycję początkową oraz końcową w zmiennych o nazwach startPos i endPos. Wypisz obie wartości pozycji w osobnych wierszach.

Spróbuj swoich sił

-- Zadeklaruj zmienną message
local message = "The ancient treasure lies beneath the old oak tree"

-- TODO: Napisz tutaj kod, który znajdzie słowo "treasure" i zapisze jego pozycje

-- Wypisz pozycje
print(startPos)
print(endPos)
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Lua online