Einführung in String-Patterns
Teil des Abschnitts Logic & Flow der Lua-Journey von Coddy — Lektion 36 von 54.
Als du string.gsub() in der vorherigen Lektion verwendet hast, hast du nach exaktem Text wie Leerzeichen oder bestimmten Wörtern gesucht. Aber was ist, wenn du „jede Ziffer“ oder „jeden Buchstaben“ finden musst, ohne das genaue Zeichen zu kennen? Hier kommen String-Patterns ins Spiel.
String-Patterns in Lua sind eine Möglichkeit zu beschreiben, nach welcher Art von Text man sucht, anstatt den exakten Text selbst anzugeben. Sie sind einfacher als reguläre Ausdrücke, aber mächtig genug für die meisten Textverarbeitungsaufgaben.
Lua bietet spezielle Codes, sogenannte Zeichenklassen, die Kategorien von Zeichen entsprechen. Hier sind die gängigsten:
%d -- entspricht jeder Ziffer (0-9)
%a -- entspricht jedem Buchstaben (a-z, A-Z)
%s -- entspricht jedem Leerraumzeichen (Leerzeichen, Tabulator, Zeilenumbruch)
%w -- entspricht jedem alphanumerischen Zeichen (Buchstaben und Ziffern)
%p -- entspricht jedem SatzzeichenSo könnten Sie diese Muster mit string.find() verwenden, um die erste Ziffer in einem String zu finden:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Ausgabe: 6Sie können auch Großbuchstaben-Versionen dieser Klassen verwenden, um das Gegenteil abzugleichen. Zum Beispiel entspricht %D jedem Zeichen, das keine Ziffer ist, und %A entspricht jedem Zeichen, das kein Buchstabe ist.
Aufgabe
EinfachSchreiben Sie eine Funktion containsDigit, die text entgegennimmt und zurückgibt, ob der Text mindestens eine Ziffer enthält.
Verwenden Sie string.find() mit der Zeichenklasse %d, um zu prüfen, ob eine Ziffer im String existiert.
Parameter:
text(string): Der Text, der auf Ziffern geprüft werden soll
Rückgabewert: true, wenn der Text mindestens eine Ziffer enthält, andernfalls false (boolean)
Spickzettel
String-Patterns in Lua beschreiben, nach welcher Art von Text Sie suchen, anstatt den exakten Text selbst anzugeben.
Lua bietet spezielle Codes, sogenannte Zeichenklassen (character classes), die Kategorien von Zeichen entsprechen:
%d -- entspricht jeder Ziffer (0-9)
%a -- entspricht jedem Buchstaben (a-z, A-Z)
%s -- entspricht jedem Leerzeichen (Leerzeichen, Tabulator, Zeilenumbruch)
%w -- entspricht jedem alphanumerischen Zeichen (Buchstaben und Ziffern)
%p -- entspricht jedem SatzzeichenSie können Großbuchstaben verwenden, um das Gegenteil zu finden. Zum Beispiel entspricht %D jedem Zeichen, das keine Ziffer ist, und %A entspricht jedem Zeichen, das kein Buchstabe ist.
Verwendung von Zeichenklassen mit string.find():
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Output: 6Probier es selbst
function containsDigit(text)
-- Schreibe hier den Code
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