string.match()
Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 38 von 54.
Während string.find() Ihnen mitteilt, wo ein Muster in einer Zeichenfolge erscheint, müssen Sie manchmal den tatsächlichen Text extrahieren, der übereinstimmte. Hier kommt string.match() ins Spiel, und es wird noch leistungsfähiger, wenn es mit Captures kombiniert wird.
Captures ermöglichen es Ihnen, bestimmte Teile eines Musters zu markieren, die Sie extrahieren möchten. Sie erstellen ein Capture, indem Sie einen Teil Ihres Musters in Klammern () einschließen. Wenn string.match() eine Übereinstimmung findet, gibt es den erfassten Text anstelle von nur der Position zurück.
Hier ist ein einfaches Beispiel, um eine Zahl aus einem String zu extrahieren:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Ausgabe: 100Das Muster %d+ bedeutet „eine oder mehrere Ziffern“. Das + ist ein Modifikator, der auf eines oder mehrere der vorangehenden Zeichenklassen passt und es Ihnen ermöglicht, mehrstellige Zahlen zu erfassen.
Sie können Captures verwenden, um bestimmte Teile eines komplexeren Musters zu extrahieren:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Ausgabe: AliceHier sagen die Klammern um %a+ Lua, dass die Buchstabenfolge erfasst werden soll, die nach "User: " kommt. Der Rest des Musters hilft dabei, die richtige Position zu finden, aber nur der erfasste Teil wird zurückgegeben.
Wenn Ihr Muster mehrere Treffergruppen enthält, gibt string.match() alle als separate Werte zurück, die Sie mehreren Variablen gleichzeitig zuweisen können.
Aufgabe
EinfachSchreibe eine Funktion extractPrice, die text entgegennimmt und den im String gefundenen Preiswert zurückgibt.
Verwende string.match() mit einem Capture-Pattern, um den numerischen Preis zu extrahieren, der nach dem Dollarzeichen erscheint. Das Pattern sollte eine oder mehrere Ziffern mit %d+ erfassen.
Parameter:
text(string): Ein String, der einen Preis im Format "Price: $XX" enthält
Rückgabewert: Der numerische Preis als String (string)
Spickzettel
Verwenden Sie string.match(), um Text zu extrahieren, der einem Muster entspricht:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Ausgabe: 100Der Modifikator + findet eine oder mehrere Entsprechungen der vorangehenden Zeichenklasse:
%d+ -- eine oder mehrere Ziffern
%a+ -- ein oder mehrere BuchstabenVerwenden Sie Klammern (), um Captures zu erstellen, die bestimmte Teile eines Musters extrahieren:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Ausgabe: AliceMehrere Captures geben separate Werte zurück:
local var1, var2 = string.match(text, "(pattern1)(pattern2)")Probier es selbst
function extractPrice(text)
-- Code hier schreiben
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittene Table-Iteration
Iterieren mit pairs()Iterieren mit ipairs()pairs() vs. ipairs()Zusammenfassung – Charakterbogen4Einführung in Metatables
Was ist eine Metatable?setmetatable & getmetatableDie __index-MetamethodeDie __newindex-MetamethodeDie __tostring-MetamethodeArithmetische Metamethoden Teil 1Arithmetische Metamethoden Teil 2Zusammenfassung – Schreibgeschützte Tabellen7Fortgeschrittene String-Manipulation
string.gsub() für ErsetzungenEinführung in String-Patternsstring.find()string.match()Iterieren mit string.gmatch()Rückblick – Log-File-Parser2Weitere Funktionen der Table-Bibliothek
table.concat()Tabellenerstellung & unpack()table.sort()Benutzerdefiniertes Sortieren mit FunktionenRückblick – Highscore-Tabelle