在Lua字符串模式中查找填充的十六进制(0xXX)

问题描述 投票:1回答:1

我有一个Lua字符串...

str = "test,0x00,0x34,0x23"

而且我想在此字符串中找到两个元素:

  1. 字母数字部分(测试)
  2. 用逗号分隔的十六进制值(0xXX)

我正在使用下面的模式,该方法有效...

_,_,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))需要什么模式?

string lua hex lua-patterns
1个回答
0
投票

我试图处理您的所有情况:

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 > 

但不是很容易处理,字符串的开头和十六进制值不只是两个字符

© www.soinside.com 2019 - 2024. All rights reserved.