string.gsub og string.gmatch
Erstatt og iterer over mønstertreff i strenger.
string.gsub og string.gmatch er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Grunnleggende om string.gsub
string.gsub(s, pattern, repl, n) erstatter treff av pattern i s med repl, opptil n ganger (standard: alle). Den returnerer den resulterende strengen og antallet utførte erstatninger. Erstatningen kan være en streng, tabell eller funksjon.
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 helloReferanser til fangstgrupper i erstatninger
I erstatningsstrengen viser %1, %2 og så videre til fangstgruppene i mønsteret. %0 viser til hele treffet. Bruk dette til å omorganisere eller omslutte tekst som er funnet.
-- 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]Funksjon som erstatning
Når erstatningen er en funksjon, kaller gsub den med hvert treff (eller hver fangstgruppe) og bruker returverdien som erstatning. Returner nil eller false for å beholde det opprinnelige treffet. Dette muliggjør dynamiske, beregnede erstatninger.
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 c6Tabell som erstatning
Når erstatningen er en tabell, slår gsub opp hvert treff (eller den første fangstgruppen) i tabellen og bruker resultatet. Hvis oppslaget returnerer nil eller false, beholdes det opprinnelige treffet. Dette passer utmerket for oppslagstabeller for erstatninger.
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 tableGrunnleggende om string.gmatch
string.gmatch(s, pattern) returnerer en iterator over alle treff av pattern i s. Hvert kall til iteratoren returnerer det neste treffet (eller fangstgrupper hvis mønsteret har slike). Dette er den idiomatiske måten å iterere over treff på i 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)
endTokenisering med gmatch
Bruk string.gmatch til å tokenisere inndata: del opp etter mellomrom, tolk CSV-rader eller hent ut strukturerte data. Mønsteret definerer hva som skal fanges opp; alt annet behandles som et skilletegn.
-- 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 luaTolke URL-parametere
Tolk spørrestrenger ved å iterere over nøkkel-verdi-par. Mønsteret ([^&=]+)=([^&]+) fanger opp hver nøkkel og verdi som er skilt med =, mellom skilletegnene &.
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) -- IstanbulFjerne HTML-tagger
En vanlig oppgave innen tekstbehandling er å fjerne HTML-tagger fra en streng. Bruk string.gsub med et mønster som samsvarer med åpne og lukkende tagger, og erstatt dem med en tom streng.
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)Escape-spesialtegn
Lua-mønsterets spesialtegn er: . + * ? [ ] ^ $ % ( ). Bruk % som escape-tegn for å finne dem bokstavelig. Når De bruker vanlige strenger med disse tegnene, sender De true som det fjerde argumentet til string.find for å deaktivere mønstertolking.
-- 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 13Telle forekomster
Bruk den andre returverdien fra string.gsub (antallet erstatninger) til å telle forekomster av et mønster i en streng, selv uten å utføre noen erstatning.
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) -- 4Hurtigsjekk
Hva returnerer string.gsub("hello", "l", "L")?
Oppsummering: gsub og gmatch
Oppsummering:
gsub(s, pat, repl, n)– erstatter; repl kan være en streng, tabell eller funksjon%1...%ni erstatningsstrenger viser til fangstgruppergmatch(s, pat)– itererer over alle treff- Bruk
%for å escape spesialtegn i mønstre:%.%+og så videre - Tell forekomster med den andre returverdien fra gsub
Lær deg Lua med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «string.gsub og string.gmatch» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «string.gsub og string.gmatch», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «string.gsub og string.gmatch»?
Erstatt og iterer over mønstertreff i strenger. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «string.gsub og string.gmatch»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?
Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Grunnleggende om strenger: sammenføying og lengde
- Finne og hente ut delstrenger
- string.format for utdata
- string.gsub og string.gmatch