【发布时间】:2016-01-22 20:45:54
【问题描述】:
我正在尝试简化脚本,但我的尝试失败了。我正在制作一个函数,它将传递给定的参数并将它们转换为索引表,但我希望能够传递带引号和不带引号的类似函数,并让函数认识到带引号的参数被视为一个值,同时也尊重非- 引用的参数。
例如:
makelist 狗“棕鼠”猫虎“彩色鹦鹉”
应该返回如下索引表:
list_table = {"dog", "brown mouse", "cat", "tiger", "colorful parrot"}
我为引用的代码工作,但它在非引用上搞砸了,最重要的是,第二次添加引用的参数。这是我所拥有的:
function makelist(str)
require 'tprint'
local list_table = {}
for word in string.gmatch(str, '%b""') do
table.insert(list_table, word)
end
for word in string.gmatch(str, '[^%p](%a+)[^%p]') do
table.insert(list_table, word)
end
tprint(list_table)
end
我不明白为什么忽略引号的省略,并且还砍掉了第一个字母。也就是说,这是我从 tprint 收到的输出(一个打印表格的函数,与代码无关):
makelist('dog "brown mouse" cat tiger "colorful parrot"')
1=""brown mouse""
2=""colorful parrot""
3="og"
4="rown"
5="mouse"
6="cat"
7="tiger"
8="olorful"
9="parrot"
如您所见,缺少“d”、“b”和“c”。我需要进行哪些修复才能获得以下输出?
1="brown mouse"
2="colorful parrot"
3="dog"
4="cat"
5="tiger"
或者更好的是,如果可能的话,让它们保留它们作为参数指定的相同顺序。
【问题讨论】:
标签: lua pattern-matching