Lua Academy · Les

string.gsub en string.gmatch

Vervang patroonovereenkomsten in strings en doorloop ze

Les 4 van 412 stappen

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 hello

Verwijzingen 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 c6

Tabel 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 table

De 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)
end

Tokeniseren 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 lua

URL-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)  -- Istanbul

HTML-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  13

Overeenkomsten 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)  -- 4

Korte 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...%n in vervangingstekenreeksen verwijzen naar vastleggingen
  • gmatch(s, pat) — alle overeenkomsten doorlopen
  • Gebruik % om speciale patroontekens te escapen: %. %+ enzovoort
  • Overeenkomsten tellen: de tweede retourwaarde van gsub
Gratis beginnen

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

  1. Basisprincipes van strings: concat en lengte
  2. Substrings zoeken en extraheren
  3. string.format voor uitvoer
  4. string.gsub en string.gmatch
← Terug naar Lua Academy