Lua Academy · Lektion

string.gsub und string.gmatch

Ersetzen Sie Muster in Zeichenketten und durchlaufen Sie deren Treffer

Lektion 4 von 412 Schritte

string.gsub und string.gmatch ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Grundlagen von string.gsub

string.gsub(s, pattern, repl, n) ersetzt Treffer von pattern in s durch repl – bis zu n-mal (Standard: alle Treffer). Die Funktion gibt den resultierenden String und die Anzahl der vorgenommenen Ersetzungen zurück. Die Ersetzung kann ein String, eine Tabelle oder eine Funktion sein.

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

Referenzen auf Erfassungsgruppen in Ersetzungen

Im Ersetzungs-String verweisen %1, %2 usw. auf die Erfassungsgruppen im Muster. %0 verweist auf den gesamten Treffer. Verwenden Sie dies, um gefundenen Text umzuordnen oder einzurahmen.

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

Wenn die Ersetzung eine Funktion ist, ruft gsub sie für jeden Treffer (oder jede Erfassungsgruppe) auf und verwendet den Rückgabewert als Ersetzung. Geben Sie nil oder false zurück, um den ursprünglichen Treffer beizubehalten. Dadurch sind dynamische, berechnete Ersetzungen möglich.

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

Tabelle als Ersetzung

Wenn die Ersetzung eine Tabelle ist, sucht gsub jeden Treffer (oder die erste Erfassungsgruppe) in der Tabelle und verwendet das Ergebnis. Gibt die Suche nil oder false zurück, bleibt der ursprüngliche Treffer erhalten. Dies eignet sich hervorragend für Ersetzungswörterbücher.

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

Grundlagen von string.gmatch

string.gmatch(s, pattern) gibt einen Iterator über alle Treffer von pattern in s zurück. Jeder Aufruf des Iterators gibt den nächsten Treffer zurück (oder die Erfassungsgruppen, falls das Muster welche enthält). Dies ist die idiomatische Methode, um in Lua über Treffer zu iterieren.

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

Tokenisierung mit gmatch

Verwenden Sie string.gmatch, um Eingaben zu tokenisieren: Teilen Sie nach Leerraum auf, analysieren Sie CSV-Zeilen oder extrahieren Sie strukturierte Daten. Das Muster legt fest, was erfasst werden soll; alles andere wird als Trennzeichen behandelt.

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

Analysieren Sie Query-Strings, indem Sie über Schlüssel-Wert-Paare iterieren. Das Muster ([^&=]+)=([^&]+) erfasst jeden durch = getrennten Schlüssel und Wert zwischen den Trennzeichen &.

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 entfernen

Eine häufige Aufgabe der Textverarbeitung ist das Entfernen von HTML-Tags aus einem String. Verwenden Sie string.gsub mit einem Muster, das öffnende und schließende Tags erkennt, und ersetzen Sie diese durch einen leeren String.

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)

Sonderzeichen escapen

Die Sonderzeichen in Lua-Mustern sind: . + * ? [ ] ^ $ % ( ). Um sie wörtlich zu finden, escapen Sie sie mit %. Wenn Sie Plain-Strings mit diesen Zeichen verwenden, übergeben Sie true als viertes Argument an string.find, um die Mustererkennung zu deaktivieren.

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

Vorkommen zählen

Verwenden Sie den zweiten Rückgabewert von string.gsub (die Anzahl der Ersetzungen), um die Vorkommen eines Musters in einem String zu zählen – auch ohne tatsächlich eine Ersetzung vorzunehmen.

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

Kurze Prüfung

Was gibt string.gsub("hello", "l", "L") zurück?

Zusammenfassung: gsub und gmatch

Zusammenfassung:

  • gsub(s, pat, repl, n) – ersetzt Treffer; repl kann ein String, eine Tabelle oder eine Funktion sein
  • %1 … %n in Ersetzungs-Strings verweisen auf Erfassungsgruppen
  • gmatch(s, pat) – iteriert über alle Treffer
  • Verwenden Sie %, um Sonderzeichen in Mustern zu escapen: %., %+ usw.
  • Vorkommen zählen: zweiter Rückgabewert von gsub
Kostenlos starten

Lerne Lua mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
40
Lektionen
159

Häufig gestellte Fragen

Ist die Lektion „string.gsub und string.gmatch“ kostenlos?

Ja — der vollständige Text von „string.gsub und string.gmatch“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „string.gsub und string.gmatch“?

Ersetzen Sie Muster in Zeichenketten und durchlaufen Sie deren Treffer Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „string.gsub und string.gmatch“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen von Zeichenketten: Verketten und Länge
  2. Teilzeichenketten finden und extrahieren
  3. string.format für Ausgaben
  4. string.gsub und string.gmatch
← Zurück zu Lua Academy