string.gsub und string.gmatch
Ersetzen Sie Muster in Zeichenketten und durchlaufen Sie deren Treffer
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 helloReferenzen 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 c6Tabelle 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 tableGrundlagen 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)
endTokenisierung 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 luaURL-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) -- IstanbulHTML-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 13Vorkommen 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) -- 4Kurze 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…%nin Ersetzungs-Strings verweisen auf Erfassungsgruppengmatch(s, pat)– iteriert über alle Treffer- Verwenden Sie
%, um Sonderzeichen in Mustern zu escapen:%.,%+usw. - Vorkommen zählen: zweiter Rückgabewert von gsub
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
- Grundlagen von Zeichenketten: Verketten und Länge
- Teilzeichenketten finden und extrahieren
- string.format für Ausgaben
- string.gsub und string.gmatch