使用gmatch将模式拆分成多个表

时间:2019-03-05 02:18:48

标签: lua string-matching

我正在尝试使用某种模式将文本拆分成多个表。

这是我的输入。

\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语句永远不会执行,因此永远不会使用循环。

1 个答案:

答案 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