我有一个Lua字符串...
str = "test,0x00,0x34,0x23"
而且我想在此字符串中找到两个元素:
我正在使用下面的模式,该方法有效...
_,_,a,b = string.find(str,"^(%a+),([x%x,]+)$")
print(a,b)
--> test 0x00,0x34,0x23
但是,我想捕获错误,例如格式错误的十六进制表示形式。
例如,使用上面的模式示例,它允许并成功返回以下输入:
str = "test,0x0x0,0x34,0x23" --> test 0x0x0,0x34,0x23
str = "test,0x00,34,0x23" --> test 0x00,34,0x23
str = "test,0x00,0x34,23x0" --> test 0x00,0x34,23x0
请只接受有效的带填充十六进制格式(string.format("0x%02x",72)
)需要什么模式?
我试图处理您的所有情况:
local function check(s)
local hh = s:gsub("^(%a+),",",")
local hex = hh:gsub('%,(%w+)', function(x)
------ check to num , to hex, if ok then return x else return error
return (tonumber(x) and x:find('^0x') and x or 'error' ) .. ' > '
end )
return s:match('^(%a+)'), hex
end
print(check("test,0x0x0,0x34,0x23")) --> test error > 0x34 > 0x23 >
print(check("test,0x00,34,0x23")) --> test 0x00 > error > 0x23 >
print(check("test,0x00,0x34,23x0")) --> test 0x00 > 0x34 > error >
但不是很容易处理,字符串的开头和十六进制值不只是两个字符