Регулярные выражения


-- Работа с регулярными выражениями осуществляется модулем string

date = "04/19/64"
m, d, y = string.match(date, "(%d+)/(%d+)/(%d+)")


-- %d matches a digit (123)
string.match("foo 123 bar", '%d%d%d')

-- %u matches an uppercase letter (U)
string.match("text with an Uppercase letter", '%u')


-- Глобальный поиск по шаблону
string.gmatch(s, pattern)


Пример 1

-- Проход по всем словам
s = "hello world from Lua"

for w in string.gmatch(s, "%a+") do
    print(w)
end

Пример 2

-- Сбор пар "ключ-значение"
t = {}
s = "from=world, to=Lua"

for k, v in string.gmatch(s, "(%w+)=(%w+)") do
    t[k] = v
end

Замены на основе регулярных выражений

-- Возвращает копию s в которой все вхождения pattern заменяются на replace
-- где replace - строка, таблица или функция
-- возвращает как второе значение - общеее количество проведенных подстановок
string.gsub (s, pattern, replace [, n])


Примеры:

x = string.gsub("hello world", "(%w+)", "%1 %1")
--> x="hello hello world world"

x = string.gsub("hello world", "%w+", "%0 %0", 1)
--> x="hello hello world"

x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
--> x="world hello Lua from"

x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
--> x="home = /home/roberto, user = roberto"

x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
   return loadstring(s)()
 end)
--> x="4+5 = 9"

local t = {name="lua", version="5.1"}
x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
--> x="lua-5.1.tar.gz"