给定的是字符串:
local a = "#5*$4a+02/+2-%110"
现在我想把下面的字符串分割成一个表,如
b[1]="5"
b[2]="*"
b[3]="$4a"
b[4]="+"
...
b[10]="%110"
我的解决方案是
local b = {}
for part in string.gmatch(a,"[%x%$%%]+[%+%-%/%*]+") do
b[#b+1] = part
end
但是我得到
b[1]="5*"
b[2]="$4a+"
b[3]="02/"
...
但没有最后一个数字:%110.
你的意思是:
string.gmatch(a,"[%x%$%%]+[%+%-%/%*]+[%x%$%%]")
这个结果是一个空表。我想计算那个字符串中的公式。
local a = "#5*$4a+02/+2-%110"
现在的问题是,像
这样的evalfunction evalStr(str)
local f= load ('return ('..str..')')
return f()
end
只能用小数来计算这个公式。这里它混合了十六进制和二进制数。因此,我必须将十六进制和二进制数字转换为十进制来计算公式。
local a = "#5*$4a+02/+2-%110"
local b = {}
for part in string.gmatch(a,"[^#][%x%%%$]*[%+%-%*/]*") do
b[#b+1] = part:match("[%w%%%$]+")
b[#b+1] = part:match("[%+%-%*/]")
end
for k,v in pairs(b) do
print(v)
end