我正在尝试使用某种模式将文本拆分成多个表。
这是我的输入。
\x10Hello\x0AWorld
这就是我期望的输出,
\x0A
<-类似的输入将始终为4个字符
{{'\x10', 'Hello'}, {'\x0A', 'World'}}
这是我到目前为止尝试过的。
local function splitIntoTable(input)
local output = {}
for code, text in (input):gmatch('(\\x%x+)(.*)') do
print(code .. ' ' .. text);
table.insert(output, { code, text })
end
return output
end
我在gmatch
中创建了2个正则表达式组,第一组用于十六进制,第二组用于文本,我不确定为什么这不起作用。 print
语句永远不会执行,因此永远不会使用循环。
答案 0 :(得分:0)
模式'\\x%x+'
与文字反斜杠,x和十六进制数字序列匹配。它与由'\x0A'
之类的十六进制转义符生成的ASCII字符不匹配。
您需要将其替换为方括号中的字符类,例如'[\x10\x0A]'
。您将必须在比赛中该位置使用期望的任何ASCII字符(或其他字节)填充字符类。
不幸的是,该模式仅在'\x10Hello\x0AWorld'
之类的字符串中匹配一次。模式的第二部分也需要修改。
local function splitIntoTable(input)
local output = {}
for code, text in (input):gmatch('([\x10\x0A])(.*)') do
print(code .. ' ' .. text);
table.insert(output, { code, text })
end
return output
end