Przechwytywanie i string.match
Proszę wyodrębniać przechwycone grupy z ciągów znaków za pomocą string.match i przechwyceń ().
Przechwytywanie i string.match to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 2 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.
Czym są przechwycenia
Przechwycenia to podwzorce ujęte w nawiasy we wzorcach Lua. Służą do wyodrębniania podciągów z dopasowanego tekstu.
string.match z przechwyceniami
Gdy wzorzec zawiera przechwycenia, string.match zwraca przechwycone podciągi zamiast całego dopasowania.
local date = "2025-01-15"
local y, m, d = date:match("(%d+)-(%d+)-(%d+)")
print(y, m, d) -- 2025 01 15Pojedyncze przechwycenie
Pojedyncze przechwycenie zwraca jedną wartość tekstową.
local s = "name: Alice"
local name = s:match("name: (%a+)")
print(name) -- AliceWiele przechwyceń
Wiele przechwyceń jest zwracanych jako wiele wartości.
local pair = "key = value"
local k, v = pair:match("(%w+)%s*=%s*(%w+)")
print(k, v) -- key valuePrzechwycenia pozycyjne ()
Puste przechwycenie () przechwytuje bieżącą pozycję w ciągu jako liczbę.
local s = "hello world"
local pos = s:match("()world")
print(pos) -- 7 (position where world starts)Opcjonalne przechwycenia
Aby przechwycić opcjonalny fragment, należy użyć ? za przechwytywaną grupą.
local s = "http://example.com"
local protocol, host = s:match("(https?)://([^/]+)")
print(protocol, host) -- http example.comstring.find z przechwyceniami
string.find z przechwyceniami zwraca kolejno początek, koniec, a następnie przechwycone podciągi.
local s = "phone: 555-1234"
local i, j, num = s:find("phone: (%d+-%d+)")
print(i, j, num) -- 1 16 555-1234Zagnieżdżone przechwycenia
Przechwycenia mogą być zagnieżdżane. Są numerowane od lewej do prawej według otwierających nawiasów.
local s = "2025-01-15"
local full, year = s:match("((%d%d%d%d)-%d%d-%d%d)")
print(full, year) -- 2025-01-15 2025Dobre praktyki dotyczące przechwyceń
Należy używać zmiennych o nazwach zgodnych z przyjętą konwencją, aby zwiększyć czytelność. Proszę unikać nadmiernego zagnieżdżania przechwyceń. Nieudane dopasowanie zwraca nil — przed użyciem przechwyceń należy zawsze sprawdzić wynik.
local result = s:match("(%d+)")
if result then print("found:", result)
else print("no match") endDopasowywanie adresów e-mail
Prosty wzorzec adresu e-mail (niezgodny ze standardem RFC) z przechwyceniami.
local email = "user@example.com"
local user, domain = email:match("([^@]+)@(.+)")
print(user, domain) -- user example.comTabela wszystkich dopasowań
Aby zebrać wszystkie dopasowania w tabeli, należy użyć string.gmatch (omówionego w następnej lekcji).
Pytanie o przechwycenia
Co zwraca "2025-01-15":match("(%d+)-(%d+)-(%d+)")?
Podsumowanie: przechwycenia i string.match
Przechwycenia wykorzystują wyl: () we wzorcach do wyodrębniania podciągów. string.match zwraca bezpośrednio przechwycone wartości. Puste () przechwytuje pozycje. Należy zawsze sprawdzać wyniki dopasowania pod kątem nil.
Często zadawane pytania
Czy lekcja „Przechwytywanie i string.match” jest bezpłatna?
Tak — pełny tekst „Przechwytywanie i string.match” 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 „Przechwytywanie i string.match”?
Proszę wyodrębniać przechwycone grupy z ciągów znaków za pomocą string.match i przechwyceń (). Ć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 2 z 4.
Ile czasu zajmuje lekcja „Przechwytywanie i string.match”?
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
- Składnia wzorców Lua
- Przechwytywanie i string.match
- string.gmatch do tokenizacji
- string.gsub do przekształceń