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 12W 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 11Wyzwanie
ŁatwyUtwó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)Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory 2: relacyjne i logiczne
Operatory równościOperatory relacyjneOperator „and”Operator „or”Operator „not”Ewaluacja z krótkim spięciemWartości prawdziwe i fałszywePodsumowanie – prosta logika7Podstawy logiki warunkowej
Instrukcja if-thenInstrukcja if-then-elseInstrukcja elseifPowtórzenie — skrzynia skarbów10Tabele, część 1: styl listy
Czym jest tabela?Tworzenie tabeliDostęp do elementów według indeksuModyfikowanie elementów według indeksuOperator długości '#'table.insert()table.remove()Powtórzenie — zarządzanie członkami drużyny13Projekt: Prosty sklep z eliksirami
Konfiguracja projektuDodawanie eliksiru2Zmienne i typy danych
Czym jest zmienna?LiczbyŁańcuchy znakówWartości logiczneWartość „nil”Funkcja type()Konwencje nazewnictwaPowtórzenie — profil postaci5Podstawowe wyjście
Wyświetlanie literałówWyświetlanie zmiennychWyświetlanie wielu wartościŁączenie ciągów znaków i zmiennychFunkcja tostring()Dane wejścioweRzutowanie typówPowtórka — raport o statusiePowtórka — do 1208Podstawy manipulacji ciągami znaków
string.len()string.upper i string.lowerstring.sub()string.rep()string.find()Podsumowanie – formatuj nazwę użytkownika3Operatory 1: Arytmetyka i konkatenacja
Operatory arytmetyczneOperator moduloOperator potęgowaniaŁączenie ciągów znakówKolejność wykonywania operatorówPowtórka – proste obliczenia6Projekt: wyświetlanie statystyk postaci
Wiadomość powitalnaDeklarowanie statystyk postaci9Podstawy funkcji
Deklarowanie funkcjiWywoływanie funkcjiFunkcje z parametramiFunkcje z wieloma parametramiInstrukcja „return”Powtórzenie — kalkulator polaPoćwicz samodzielnie: Kompilator Lua online