Я пытаюсь использовать string.find
в Lua для анализа содержимого введенной пользователем строки. Есть три различных параметра, которые я пытаюсь найти (если пользователь вводит их), но иногда только один.Образец соответствия с строковым модулем 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
.
Любая помощь будет оценена по достоинству. Благодаря! :)
если пользовательский ввод является "| б | с", которая возвращает а = "а" Ь = "а" с = "| B | C" – 2009-07-17 02:45:44
Какую версию LUA вы используете? Я тестирую его на v5.1.4 и возвращает ожидаемые значения. – 2009-07-17 03:01:42
Я использую версию 5.1 – 2009-07-17 05:11:20