在Lua中,我有以下十六进制字符串
local string="7661722061737472696e673d226c6f6c223b"
如何在每两个字符之间插入/插入“%”作为分隔符。
我希望它看起来像这样。
%76%61%72%20%61%73%74%72%69%6e%67%3d%22%6c%6f%6c%22%3b
答案 0 :(得分:2)
一种简单的方法是使用string.gsub
将匹配的模式替换为捕获的字符串和分隔符。生成的字符串将有一个前面的分隔符,可以通过从开头加上分隔符加上分隔符的长度来删除它。
有关模式匹配的更好理解,请参阅§6.4.1 – Patterns。
local function sep (str, patt, re)
return str:gsub(patt, '%' .. re .. '%1'):sub(1 + #re)
end
print(sep('7661722061737472696e673d226c6f6c223b', '%x%x', '%'))
--> 76%61%72%20%61%73%74%72%69%6e%67%3d%22%6c%6f%6c%22%3b
另一种方法是将字符串拆分为表格,然后使用table.concat
将表格连接成字符串。
详尽的方法是计算循环中的每个第n个字符,并获取字符串切片,与目前为止的结果和分隔符连接。
答案 1 :(得分:1)
以下是gsub
的另一种解决方案:
s="7661722061737472696e673d226c6f6c223b"
t=s:gsub("..","%%%1")
print(t)
它显示:匹配两个字符并将其替换为%
和匹配,从而将%
添加到两个字符之前。