string.gsub en string.gmatch
Vervang patroonovereenkomsten in strings en doorloop ze
string.gsub en string.gmatch is een gratis Lua Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.
De basis van string.gsub
string.gsub(s, pattern, repl, n) vervangt overeenkomsten van pattern in s door repl, maximaal n keer (standaard: alle keren). De functie retourneert de resulterende tekenreeks en het aantal uitgevoerde vervangingen. De vervanging kan een tekenreeks, tabel of functie zijn.
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 helloVerwijzingen naar vastleggingen in vervangingen
In de vervangingstekenreeks verwijzen %1, %2 enzovoort naar vastleggingen in het patroon. %0 verwijst naar de volledige overeenkomst. Gebruik dit om gematchte tekst te herschikken of er iets omheen te zetten.
-- 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]Functie als vervanging
Als de vervanging een functie is, roept gsub deze aan voor elke overeenkomst (of de vastleggingen) en gebruikt de retourwaarde als vervanging. Retourneer nil of false om de oorspronkelijke overeenkomst te behouden. Zo kun je dynamische, berekende vervangingen uitvoeren.
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 c6Tabel als vervanging
Als de vervanging een tabel is, zoekt gsub elke overeenkomst (of de eerste vastlegging) op in de tabel en gebruikt het resultaat. Als de opzoekactie nil of false retourneert, blijft de oorspronkelijke overeenkomst behouden. Dit is ideaal voor vervangingswoordenboeken.
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 tableDe basis van string.gmatch
string.gmatch(s, pattern) retourneert een iterator over alle overeenkomsten van pattern in s. Elke aanroep van de iterator retourneert de volgende overeenkomst (of de vastleggingen als het patroon die bevat). Dit is de gebruikelijke manier om in Lua over overeenkomsten te itereren.
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)
endTokeniseren met gmatch
Gebruik string.gmatch om invoer te tokeniseren: splits op witruimte, parse CSV-rijen of extraheer gestructureerde gegevens. Het patroon bepaalt wat je vastlegt; al het overige wordt als scheidingsteken behandeld.
-- 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 luaURL-parameters parsen
Parse querytekenreeksen door sleutel-waardeparen te doorlopen. Het patroon ([^&=]+)=([^&]+) legt elke sleutel en waarde vast die door = van elkaar zijn gescheiden, tussen &-scheidingstekens.
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) -- IstanbulHTML-tags verwijderen
Een veelvoorkomende taak bij tekstverwerking is het verwijderen van HTML-tags uit een tekenreeks. Gebruik string.gsub met een patroon dat openende en sluitende tags matcht, en vervang deze door een lege tekenreeks.
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)Speciale patroontekens escapen
De speciale tekens in Lua-patronen zijn: . + * ? [ ] ^ $ % ( ). Als je ze letterlijk wilt matchen, escape je ze met %. Wanneer je gewone tekenreeksen met deze tekens gebruikt, geef je true door als vierde argument aan string.find om patroonmatching uit te schakelen.
-- 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 13Overeenkomsten tellen
Gebruik de tweede retourwaarde van string.gsub (het aantal vervangingen) om het aantal keer dat een patroon in een tekenreeks voorkomt te tellen, zelfs als je niets vervangt.
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) -- 4Korte controle
Wat retourneert string.gsub("hello", "l", "L")?
Samenvatting: gsub en gmatch
Samenvatting:
gsub(s, pat, repl, n)— vervangen; repl kan een tekenreeks, tabel of functie zijn%1...%nin vervangingstekenreeksen verwijzen naar vastleggingengmatch(s, pat)— alle overeenkomsten doorlopen- Gebruik
%om speciale patroontekens te escapen:%.%+enzovoort - Overeenkomsten tellen: de tweede retourwaarde van gsub
Leer Lua met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 40
- Lessen
- 159
Veelgestelde vragen
Is de les “string.gsub en string.gmatch” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “string.gsub en string.gmatch”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.
Wat leer ik in “string.gsub en string.gmatch”?
Vervang patroonovereenkomsten in strings en doorloop ze Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Lua Academy te beginnen?
Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “string.gsub en string.gmatch”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Lua Academy?
Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Basisprincipes van strings: concat en lengte
- Substrings zoeken en extraheren
- string.format voor uitvoer
- string.gsub en string.gmatch