Lua Academy · Lektion

string.gsub och string.gmatch

Ersätt och iterera över mönsterträffar i strängar.

Lektion 4 av 412 steg

string.gsub och string.gmatch är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Grunderna i string.gsub

string.gsub(s, pattern, repl, n) ersätter matchningar av pattern i s med repl, högst n gånger (standardvärde: alla). Funktionen returnerar den resulterande strängen och antalet utförda ersättningar. Ersättningen kan vara en sträng, tabell eller funktion.

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

Fångstreferenser i ersättningar

I ersättningssträngen hänvisar %1, %2 och så vidare till fångster i mönstret. %0 hänvisar till hela matchningen. Använd detta för att ordna om eller omsluta matchad text.

-- 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]

Funktion som ersättning

När ersättningen är en funktion anropar gsub den med varje matchning (eller fångst) och använder returvärdet som ersättning. Returnera nil eller false för att behålla den ursprungliga matchningen. Detta möjliggör dynamiska, beräknade ersättningar.

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

Tabell som ersättning

När ersättningen är en tabell slår gsub upp varje matchning (eller den första fångsten) i tabellen och använder resultatet. Om uppslagningen returnerar nil eller false behålls den ursprungliga matchningen. Detta passar utmärkt för ersättningstabeller.

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

Grunderna i string.gmatch

string.gmatch(s, pattern) returnerar en iterator över alla matchningar av pattern i s. Varje anrop till iteratorn returnerar nästa matchning (eller fångster om mönstret innehåller sådana). Detta är det idiomatiska sättet att iterera över matchningar 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)
end

Tokenisering med gmatch

Använd string.gmatch för att tokenisera indata: dela upp efter blanktecken, tolka CSV-rader eller extrahera strukturerade data. Mönstret definierar vad som ska fångas; allt annat behandlas som en avgränsare.

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

Tolkning av URL-parametrar

Tolka frågesträngar genom att iterera över nyckel-värde-par. Mönstret ([^&=]+)=([^&]+) fångar varje nyckel och varje värde som separeras av = mellan avgränsare med &.

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

Ta bort HTML-taggar

En vanlig textbearbetningsuppgift är att ta bort HTML-taggar från en sträng. Använd string.gsub med ett mönster som matchar öppnings- och stängningstaggar och ersätter dem med en tom sträng.

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)

Escapa specialtecken i mönster

Lua-mönstrens specialtecken är: . + * ? [ ] ^ $ % ( ). För att matcha dem bokstavligt escapar Ni dem med %. När Ni använder vanliga strängar med dessa tecken skickar Ni true som det fjärde argumentet till string.find för att inaktivera mönstermatchning.

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

Räkna förekomster

Använd det andra returvärdet från string.gsub (antalet ersättningar) för att räkna förekomster av ett mönster i en sträng, även utan att göra någon ersättning.

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

Snabb kontroll

Vad returnerar string.gsub("hello", "l", "L")?

Sammanfattning: gsub och gmatch

Sammanfattning:

  • gsub(s, pat, repl, n) – ersätter; repl kan vara en sträng, tabell eller funktion
  • %1 … %n i ersättningssträngar hänvisar till fångster
  • gmatch(s, pat) – itererar över alla matchningar
  • Använd % för att escapa specialtecken i mönster: %., %+ och så vidare
  • Räkna förekomster med det andra returvärdet från gsub
Gratis att börja

Lär dig Lua med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
40
Lektioner
159

Vanliga frågor

Är lektionen ”string.gsub och string.gmatch” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”string.gsub och string.gmatch”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”string.gsub och string.gmatch”?

Ersätt och iterera över mönsterträffar i strängar. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”string.gsub och string.gmatch”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lua Academy-lektionen?

Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grunderna i strängar: konkatenering och längd
  2. Hitta och extrahera delsträngar
  3. string.format för utdata
  4. string.gsub och string.gmatch
← Tillbaka till Lua Academy