Разделение шаблона на несколько таблиц с помощью gmatch - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь разбить мой текст на несколько таблиц, используя шаблон.

Так что это мой ввод.

\x10Hello\x0AWorld

Это то, что я ожидаю вмой вывод \x0A <- аналогичные входные данные всегда будут иметь длину 4 символа </p>

{{'\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

Iсоздал gmatch 2 группы регулярных выражений: первая группа для шестнадцатеричного кода, а вторая группа для текста, я не уверен, почему это не работает.Оператор print никогда не выполняется, поэтому цикл никогда не используется.

1 Ответ

0 голосов
/ 05 марта 2019

Шаблон '\\x%x+' соответствует буквенной обратной косой черте, x и последовательности шестнадцатеричных цифр.Он не соответствует символу ASCII, сгенерированному шестнадцатеричным экранированием, таким как '\x0A'.

. Вам необходимо заменить его на класс символов в квадратных скобках, например '[\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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...