Сопоставление с образцом lua: захват с разделителями
Я пытаюсь разобрать строку, такую как: &1 first &2 second &4 fourth \\
и из него построить стол
t = {1=first, 2=second, 4=fourth}
Я не очень разбираюсь в регулярных выражениях в целом, поэтому моя наивная попытка (без учета \\
и части стола на данный момент)
local s = [[&1 first &2 second &4 fourth \\]]
for k,v in string.gmatch(s, "&(%d+)(.-)&") do
print("k = "..k..", v = "..v)
end
который дает только первую захваченную пару, когда я ожидал увидеть две захваченные пары. Я прочитал немного и нашел lpeg
библиотека, но она мне совершенно незнакома. Является lpeg
нужен здесь? Кто-нибудь может объяснить мою ошибку?
2 ответа
Решение
&(%d+)(.-)&
Матчи&1 first &
- уход
2 second &4 fourth \\
быть подобранным по - Ваш шаблон не соответствует ни одному другому элементу
Если вы знаете, что значения являются одним словом, это должно работать:
string.gmatch(s, "&(%d+)%s+([^%s&]+)")
Возьмите "&", затем 1 или несколько цифр (захвачено), затем один или несколько пробелов и затем один или несколько не пробелов, не & символы (захвачено).