Ich versuche string.find
in Lua zu verwenden, um den Inhalt einer vom Benutzer eingegebenen Zeichenfolge zu analysieren. Es gibt bis zu drei verschiedene Parameter, die ich versuche zu finden (wenn der Benutzer sie eingibt), aber manchmal nur eine.Pattern Matching mit Lua's String-Modul
Die Eingabezeichenfolge in seiner längeren Form wie folgt aussieht:
local userInput = "x|y|z"
wo x
, y
und z
kann jedes Zeichen oder nichts (leere Zeichenkette, dh ""
) und z
auch vertikale Balken enthalten/Pfeifen - Ich möchte die Saite nur in drei Abschnitte aufteilen, basierend auf den ersten beiden vertikalen Balken ("|"
). Die Schwierigkeit besteht darin, dass der Benutzer kann nicht auch diese Form verwenden - er oder sie kann einfach "x"
oder "x||z"
oder "||z"
usw. In diesem Fall eintreten würde ich noch die Werte von x
, y
erhalten muß, und z
, und es sollte sein klar, welchen Variablen sie zugeordnet wurden.
Zum Beispiel habe ich versucht, dies:
local _,_,a,b,c = string.find(usermsg, "([^|]*)|?([^|]*)|?(.+)")
Hinweis zunächst, dass dies nicht richtig selbst a
holen, b
und c
richtig. Aber was noch wichtiger ist, wenn der usermsg
nur "x"
war, setzte er den Wert x
auf die Variable c
, wenn es a
sein sollte. Und wenn der Benutzer "x|y"
eintippt, ist die Variable a
x
(korrekt), aber die Variable c
ist y
(falsch, sollte der Variablen b
zugewiesen werden).
So dann habe ich versucht, es separat zu tun:
local _,_,a = string.find(usermsg , "([^|]+)|?[^|]*|?.*") local _,_,b= string.find(usermsg , "[^|]*|([^|]+)|?.*") local _,_,c= string.find(usermsg , "[^|]*|[^|]*|(.+)")
Aber dies nicht gelingt auch. Es passt x
, aber nicht y
, und c
endet als y
plus das Rohr und z
.
Jede Hilfe wäre willkommen. Vielen Dank! :)
wenn Benutzereingaben "a | b | c", die a = "a" b = "a" c = gibt "| b | c" –
Welche Version von LUA verwenden Sie? Ich teste es auf Version 5.1.4 und es gibt die beabsichtigten Werte zurück. –
Ich benutze Version 5.1 –