将字符串转换为具有模式匹配的表的问题



给定的是字符串:

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"

现在的问题是,像

这样的eval
function 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

最新更新