string.match()
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 38 z 54.
Podczas gdy string.find() informuje, gdzie wzorzec występuje w ciągu znaków, czasami trzeba wyodrębnić rzeczywisty tekst, który pasował do wzorca. Właśnie do tego służy string.match(), a w połączeniu z przechwytywaniem staje się jeszcze potężniejsza.
Przechwytywanie pozwala oznaczać konkretne części wzorca, które chcesz wyodrębnić. Tworzysz przechwytywanie, ujmując część wzorca w nawiasy (). Gdy string.match() znajdzie dopasowanie, zwraca przechwycony tekst zamiast samej pozycji.
Oto prosty przykład wyodrębniania liczby z ciągu znaków:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Wynik: 100Wzorzec %d+ oznacza „jedną lub więcej cyfr”. Znak + jest modyfikatorem, który dopasowuje jeden lub więcej znaków z poprzedzającej klasy znaków, umożliwiając przechwytywanie liczb wielocyfrowych.
Możesz używać przechwytywania, aby wyodrębniać określone części bardziej złożonego wzorca:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Wynik: AliceTutaj nawiasy wokół %a+ informują Lua, aby przechwycić sekwencję liter występującą po „User: ”. Pozostała część wzorca pomaga znaleźć właściwą pozycję, ale zwracana jest tylko przechwycona część.
Jeśli twój wzorzec ma wiele przechwyceń, string.match() zwraca każde z nich jako osobną wartość, które możesz przypisać jednocześnie do wielu zmiennych.
Wyzwanie
ŁatwyNapisz funkcję extractPrice, która przyjmuje text i zwraca wartość ceny znalezioną w ciągu znaków.
Użyj string.match() ze wzorcem przechwytującym, aby wyodrębnić cenę liczbową występującą po znaku dolara. Wzorzec powinien przechwytywać jedną lub więcej cyfr za pomocą %d+.
Parametry:
text(ciąg znaków): Ciąg znaków zawierający cenę w formacie "Price: $XX"
Zwraca: Cenę liczbową jako ciąg znaków (ciąg znaków)
Spróbuj swoich sił
function extractPrice(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