string.find()
Teil des Abschnitts Logik und Programmablauf der Lua-Journey von Coddy. Lektion 37 von 54.
Da du jetzt Zeichenklassen verstehst, kannst du sie mit string.find() verwenden, um nach Mustern statt nach genauem Text zu suchen. Das eröffnet leistungsstarke Möglichkeiten zur Textvalidierung und -analyse.
Die Funktion string.find() funktioniert mit Mustern genauso wie mit literalen Zeichenfolgen. Sie gibt die Position zurück, an der das Muster zum ersten Mal übereinstimmt:
local text = "User123"
local position = string.find(text, "%d")
print(position) -- Ausgabe: 5Damit wird die erste Ziffer in der Zeichenfolge gefunden, die sich an Position 5 befindet. Du kannst auch mit Zeichenklassen in Großbuchstaben nach dem Gegenteil suchen:
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- Ausgabe: 1Hier entspricht %D einem beliebigen Nicht-Ziffernzeichen, sodass der erste Buchstabe an Position 1 gefunden wird.
Eine häufige Aufgabe bei der Validierung ist die Prüfung, ob eine Zeichenfolge mit einem bestimmten Muster beginnt. Du kannst den Anker ^ am Anfang eines Musters verwenden, damit es nur am Anfang der Zeichenfolge übereinstimmt:
local username = "player42"
local startsWithLetter = string.find(username, "^%a")
if startsWithLetter then
print("Valid username")
else
print("Username must start with a letter")
endDieses Muster prüft, ob die Zeichenfolge mit einem Buchstaben beginnt, und eignet sich daher für die Eingabevalidierung, wenn bestimmte Formate erforderlich sind.
Um ein Sonderzeichen selbst zu finden, etwa einen Punkt, kannst du es entweder mit % maskieren oder Muster mit einer einfachen Suche deaktivieren (1, um beim ersten Zeichen zu beginnen, true für eine einfache Suche):
print(string.find("v1.5", "%.")) -- Ausgabe: 3 3
print(string.find("v1.5", ".", 1, true)) -- Ausgabe: 3 3
print(string.find("v1.5", ".")) -- Ausgabe: 1 1 (. entspricht einem beliebigen Zeichen)Aufgabe
EinfachSchreibe eine Funktion startsWithLetter, die text entgegennimmt und zurückgibt, ob die Zeichenfolge mit einem Buchstaben beginnt.
Verwende string.find() mit dem Anker ^ und der Zeichenklasse %a, um zu prüfen, ob die Zeichenfolge mit einem Buchstaben beginnt.
Parameter:
text(Zeichenfolge): Die zu prüfende Zeichenfolge
Rückgabewert: true, wenn die Zeichenfolge mit einem Buchstaben beginnt, andernfalls false (boolesch)
Probier es selbst
function startsWithLetter(text)
-- Schreibe hier Code
end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik und Programmablauf
1Fortgeschrittene Tabelleniteration
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 2Rückblick – Read-Only-Tabelle7Fortgeschrittene String-Manipulation
string.gsub() zur ErsetzungEinführung in String-Musterstring.find()string.match()Iteration mit string.gmatch()Zusammenfassung – Parser für Logdateien2Weitere Funktionen der Tabellenbibliothek
table.concat()Tabellenkonstruktion & unpack()table.sort()Eigene Sortierung mit FunktionenRückblick – Highscore-TabelleÜbe selbstständig: Online-Lua-Compiler