string.gsub i string.gmatch
Proszę zastępować dopasowania wzorców w ciągach znaków i iterować po nich.
string.gsub i string.gmatch to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Podstawy string.gsub
string.gsub(s, pattern, repl, n) zastępuje dopasowania do pattern w s wartością repl, najwyżej n razy (domyślnie: wszystkie). Zwraca wynikowy napis oraz liczbę wykonanych zastąpień. Zastąpienie może być napisem, tabelą lub funkcją.
local s = "hello world hello"
local result, count = string.gsub(s, "hello", "hi")
print(result) -- hi world hi
print(count) -- 2
-- Limit replacements
local r2 = string.gsub(s, "hello", "hi", 1)
print(r2) -- hi world helloOdwołania do przechwyceń w zastąpieniu
W napisie zastępującym %1, %2 itd. odwołują się do przechwyceń we wzorcu. %0 oznacza całe dopasowanie. Można tego użyć do zmiany kolejności dopasowanego tekstu lub ujęcia go w dodatkowy tekst.
-- Swap first and last name
local name = "Smith, John"
local swapped = string.gsub(name, "(%a+), (%a+)", "%2 %1")
print(swapped) -- John Smith
-- Wrap numbers in brackets
local text = "items: 3 and 7 total 10"
local tagged = string.gsub(text, "%d+", "[%0]")
print(tagged) -- items: [3] and [7] total [10]Funkcja jako zastąpienie
Gdy zastąpienie jest funkcją, gsub wywołuje ją dla każdego dopasowania (lub przechwycenia) i używa zwracanej wartości jako zastąpienia. Zwróć nil lub false, aby zachować oryginalne dopasowanie. Umożliwia to dynamiczne zastąpienia obliczane w trakcie działania programu.
local env = {NAME="Lua", VERSION="5.4"}
local template = "Welcome to $NAME version $VERSION!"
local result = string.gsub(template, "%$(%w+)", env)
print(result) -- Welcome to Lua version 5.4!
-- Double each number
local s = "a1 b2 c3"
local r = string.gsub(s, "%d+", function(n)
return tostring(tonumber(n) * 2)
end)
print(r) -- a2 b4 c6Tabela jako zastąpienie
Gdy zastąpienie jest tabelą, gsub wyszukuje w niej każde dopasowanie (lub pierwsze przechwycenie) i używa znalezionej wartości. Jeśli wyszukiwanie zwróci nil lub false, oryginalne dopasowanie zostanie zachowane. To idealne rozwiązanie w przypadku słowników podstawień.
local abbreviations = {
str = "string",
num = "number",
tbl = "table",
fn = "function",
}
local text = "A str can hold a num or a tbl"
local expanded = string.gsub(text, "%a+", abbreviations)
print(expanded)
-- A string can hold a number or a tablePodstawy string.gmatch
string.gmatch(s, pattern) zwraca iterator przechodzący po wszystkich dopasowaniach pattern w s. Każde wywołanie iteratora zwraca następne dopasowanie (lub przechwycenia, jeśli wzorzec je zawiera). To idiomatyczny sposób iterowania po dopasowaniach w Lua.
local s = "one=1 two=2 three=3"
-- Iterate all words
for word in string.gmatch(s, "%a+") do
io.write(word .. " ")
end
print() -- one two three
-- Iterate key=value pairs
for k, v in string.gmatch(s, "(%a+)=(%d+)") do
print(k, v)
endTokenizacja za pomocą gmatch
Użyj string.gmatch do tokenizacji danych wejściowych: dzielenia według białych znaków, analizowania wierszy CSV lub wyodrębniania danych strukturalnych. Wzorzec określa, co ma zostać przechwycone; wszystko inne jest traktowane jako separator.
-- Split by whitespace
local function tokenize(s)
local tokens = {}
for token in string.gmatch(s, "%S+") do
tokens[#tokens+1] = token
end
return tokens
end
local toks = tokenize(" hello world lua ")
for i, t in ipairs(toks) do
print(i, t)
end
-- 1 hello 2 world 3 luaAnalizowanie parametrów URL
Analizuj napisy zapytań, iterując po parach klucz-wartość. Wzorzec ([^&=]+)=([^&]+) przechwytuje każdy klucz i wartość rozdzielone przez =, między separatorami &.
local url_params = "name=Alice&age=30&city=Istanbul"
local params = {}
for key, value in string.gmatch(url_params, "([^&=]+)=([^&]*)") do
params[key] = value
end
print(params.name) -- Alice
print(params.age) -- 30
print(params.city) -- IstanbulUsuwanie znaczników HTML
Częste zadanie związane z przetwarzaniem tekstu: usunięcie znaczników HTML z napisu. Użyj string.gsub ze wzorcem dopasowującym znaczniki otwierające i zamykające, a następnie zastąp je pustym napisem.
local html = "<h1>Hello</h1> <p>World <b>bold</b></p>"
local plain = string.gsub(html, "<[^>]+>", "")
print(plain) -- Hello World bold
-- Replace <br> with newline
local html2 = "line1<br>line2<br/>line3"
local fixed = string.gsub(html2, "<br/?>", "\n")
print(fixed)Escapowanie znaków specjalnych wzorców
Znakami specjalnymi wzorców Lua są: . + * ? [ ] ^ $ % ( ). Aby dopasować je dosłownie, poprzedź je znakiem %. Jeśli używasz zwykłych napisów zawierających te znaki, przekaż true jako czwarty argument funkcji string.find, aby wyłączyć dopasowywanie wzorców.
-- Escape a string for use in a pattern
local function escapePattern(s)
return (string.gsub(s, "[%(%)%.%%%+%-%*%?%[%^%$]", "%%%1"))
end
local query = "1+1=2"
local pattern = escapePattern(query)
print(string.find("result: 1+1=2", pattern, 1)) -- 9 13Zliczanie wystąpień
Użyj drugiej zwracanej wartości funkcji string.gsub (liczby zastąpień), aby zliczyć wystąpienia wzorca w napisie, nawet bez wykonywania żadnych zastąpień.
local text = "banana"
local _, count = string.gsub(text, "a", "")
print("'a' appears " .. count .. " times") -- 3
-- Count words
local sentence = "the quick brown fox"
local _, wordCount = string.gsub(sentence, "%S+", "")
print("Words:", wordCount) -- 4Szybkie sprawdzenie
Co zwraca string.gsub("hello", "l", "L")?
Podsumowanie: gsub i gmatch
Podsumowanie:
gsub(s, pat, repl, n)— zastępuje dopasowania; repl może być napisem, tabelą lub funkcją%1...%nw napisach zastępujących odwołują się do przechwyceńgmatch(s, pat)— iteruje po wszystkich dopasowaniach- Użyj
%, aby escapować specjalne znaki wzorców:%.,%+itd. - Zliczanie wystąpień: druga zwracana wartość funkcji gsub
Często zadawane pytania
Czy lekcja „string.gsub i string.gmatch” jest bezpłatna?
Tak — pełny tekst „string.gsub i string.gmatch” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „string.gsub i string.gmatch”?
Proszę zastępować dopasowania wzorców w ciągach znaków i iterować po nich. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „string.gsub i string.gmatch”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy ciągów znaków: konkatenacja i długość
- Wyszukiwanie i wyodrębnianie podciągów
- string.format do formatowania wyjścia
- string.gsub i string.gmatch