str = "У меня 25 яблок, у тебя 7 яблок"
-- (%d+)
var1, var2 = str:match("У меня (%d+), у тебя (%d+) яблок")
-- как видишь, теперь в переменной var1 будет число 25 (в виде строки),
-- а в переменной var2 будет число 7 (в виде строки)
-- Таким образом ты захватываешь нужный тебе текст с помощью круглых скобок.
-- %d+
var1 = "У меня %d+ яблок, у тебя %d+ яблок"
-- В переменной var1 будет полностью вся найденная строка, отдельно ничего не захватывает.
-- [%d+]
-- Никогда такого не видел.
-- Но я бы написал это так:
var1 = str:match("У меня [%d абв]+, у тебя [%d абв]+ яблок")
-- Из квадратных скобок подставляется только один символ из перечисленных в них. Тось %d - число или одна из букв "а, б, в", также в примере я сделал пробел - он тоже как бы подходит под этот шаблон.
-- Таким образом если бы вместо кол. яблоко было бы "ааабббввваа", то патерн для поиска бы сработал тоже, среагировал на эти три буквы.
-- +
-- Плюсик после символа означает, что таких символов должно быть 1 или больше.
-- %
-- Означает, что следующий символ особо специальный, например "%d" которое означает одну циферку. "%d+" означает же 1 или больше циферок.