Lua-Muster helfen dir, bestimmte Zeichen oder Wörter in einem Text zu finden. Hier lernst du, wie sie funktionieren!
Symbol | Bedeutung | Erklärung |
---|---|---|
^ | Anfang | Muster beginnt am Anfang des Textes. |
q | Buchstabe | Sucht nach dem Buchstaben „q“. |
+ | Wiederholung | Ein oder mehr Wiederholungen erlaubt. |
- | Faul | Passt so wenig wie möglich. |
* | Wiederholung | Null oder mehr Wiederholungen. |
? | Optional | Zeichen darf da sein – muss aber nicht. |
. | Irgendein Zeichen | Steht für ein beliebiges Zeichen. |
%. | Entkommt „.“ | Steht wirklich für den Punkt „.“. |
(...) | Gruppe | Fasst Zeichen zusammen, um sie später zu verwenden. |
%a | Buchstaben | Alle Buchstaben von A-Z oder a-z. |
%c | Steuerzeichen | z. B. Enter, Tabulator, usw. |
%d | Zahlen | Ziffern von 0 bis 9. |
%g | Druckbar | Alle sichtbaren Zeichen außer Leerzeichen. |
%l | Kleinbuchstaben | Buchstaben von a bis z. |
%p | Satzzeichen | Zeichen wie ! ? . , usw. |
string.match
oder
string.gsub
ausprobieren!
Stell dir vor, jemand schreibt im Chat:
/teleport Max 120 80
Wir können diesen Befehl mit Lua-Mustern in Name und Zahlen aufteilen:
local eingabe = "/teleport Max 120 80"
-- Lua-Muster: Befehl, Name und zwei Zahlen extrahieren
local name, x, y = string.match(eingabe, "/teleport%s+(%a+)%s+(%d+)%s+(%d+)")
print("Name:", name) -- Max
print("X:", x) -- 120
print("Y:", y) -- 80
So kannst du mit Lua Muster Eingaben analysieren und verarbeiten!
<!-- init.lua -->
minetest.register_chatcommand("teleport", {
params = "<name> <x> <y>",
description = "Teleportiere einen Spieler an Position X Y",
privs = {teleport = true},
func = function(name, param)
local target, x, y = string.match(param, "(%a+)%s+(%d+)%s+(%d+)")
if not target or not x or not y then
return false, "Bitte benutze: /teleport <name> <x> <y>"
end
x = tonumber(x)
y = tonumber(y)
local player = minetest.get_player_by_name(target)
if player then
player:set_pos({x=x, y=y, z=0}) -- Teleportation
minetest.chat_send_player(name, "Teleportiere " .. target .. " nach X: " .. x .. " Y: " .. y)
return true
else
return false, "Spieler " .. target .. " nicht gefunden"
end
end
})