Я пытаюсь использовать string.find
в Lua для анализа содержимого введенной пользователем строки. Я пытаюсь найти до трех различных параметров (если пользователь вводит их), но иногда только один.
Входная строка в более длинной форме выглядит следующим образом:
local userInput = "x|y|z"
, где x
, y
и z
могут быть любым символом или ничем (пустая строка, т.е. ""
) и
z
также может содержать вертикальные черты / трубы - я хочу разделить строку только на три секции на основе первых двух встреченных вертикальных черт ("|"
). Сложность в том, что пользователь также не может использовать эту форму - он или она может просто ввести "x"
или "x||z"
или "||z"
и т. Д. В этом случае мне все равно нужно получить значения x
, y
и z
, и должно быть ясно, каким переменным они были назначены.
Например, я попробовал это:
local _,_,a,b,c = string.find(usermsg, "([^|]*)|?([^|]*)|?(.+)")
Прежде всего, обратите внимание, что он даже неправильно выбирает a
, b
и c
. Но что еще более важно, когда usermsg
был просто "x"
, он устанавливал значение x
в переменную c
, когда оно должно быть a
. И когда пользователь вводит "x|y"
, переменная a
равна x
(правильно), а переменная c
равна y
(неправильно, она должна быть назначена переменной b
).
Итак, я попытался сделать это отдельно:
local _,_,a = string.find(usermsg , "([^|]+)|?[^|]*|?.*")
local _,_,b= string.find(usermsg , "[^|]*|([^|]+)|?.*")
local _,_,c= string.find(usermsg , "[^|]*|[^|]*|(.+)")
Но и это не помогает. Он соответствует x
, но не y
, а c
в итоге становится y
плюс труба и z
.
Буду признателен за любую помощь. Спасибо! :)