string.gsub e string.gmatch
Substitua e percorra correspondências de padrões em cadeias.
string.gsub e string.gmatch é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Fundamentos de string.gsub
string.gsub(s, pattern, repl, n) substitui as correspondências de pattern em s por repl, até n vezes (por padrão, todas). Retorna a cadeia resultante e a quantidade de substituições realizadas. A substituição pode ser uma cadeia de caracteres, uma tabela ou uma função.
local s = "hello world hello"
local result, count = string.gsub(s, "hello", "hi")
print(result) -- hi world hi
print(count) -- 2
-- Limit replacements
local r2 = string.gsub(s, "hello", "hi", 1)
print(r2) -- hi world helloReferências a capturas na substituição
Na cadeia de substituição, %1, %2 etc. referem-se às capturas do padrão. %0 refere-se à correspondência inteira. Use isso para reorganizar ou envolver o texto correspondente.
-- Swap first and last name
local name = "Smith, John"
local swapped = string.gsub(name, "(%a+), (%a+)", "%2 %1")
print(swapped) -- John Smith
-- Wrap numbers in brackets
local text = "items: 3 and 7 total 10"
local tagged = string.gsub(text, "%d+", "[%0]")
print(tagged) -- items: [3] and [7] total [10]Função como substituição
Quando a substituição é uma função, gsub a chama para cada correspondência (ou captura) e usa o valor retornado como substituição. Retorne nil ou false para manter a correspondência original. Isso permite substituições dinâmicas e calculadas.
local env = {NAME="Lua", VERSION="5.4"}
local template = "Welcome to $NAME version $VERSION!"
local result = string.gsub(template, "%$(%w+)", env)
print(result) -- Welcome to Lua version 5.4!
-- Double each number
local s = "a1 b2 c3"
local r = string.gsub(s, "%d+", function(n)
return tostring(tonumber(n) * 2)
end)
print(r) -- a2 b4 c6Tabela como substituição
Quando a substituição é uma tabela, gsub procura cada correspondência (ou a primeira captura) na tabela e usa o resultado. Se a consulta retornar nil ou false, a correspondência original será mantida. Isso é ideal para dicionários de substituição.
local abbreviations = {
str = "string",
num = "number",
tbl = "table",
fn = "function",
}
local text = "A str can hold a num or a tbl"
local expanded = string.gsub(text, "%a+", abbreviations)
print(expanded)
-- A string can hold a number or a tableFundamentos de string.gmatch
string.gmatch(s, pattern) retorna um iterador sobre todas as correspondências de pattern em s. Cada chamada ao iterador retorna a próxima correspondência (ou as capturas, se o padrão as tiver). Essa é a maneira idiomática de iterar sobre correspondências em Lua.
local s = "one=1 two=2 three=3"
-- Iterate all words
for word in string.gmatch(s, "%a+") do
io.write(word .. " ")
end
print() -- one two three
-- Iterate key=value pairs
for k, v in string.gmatch(s, "(%a+)=(%d+)") do
print(k, v)
endTokenização com gmatch
Use string.gmatch para tokenizar a entrada: divida por espaços em branco, analise linhas CSV ou extraia dados estruturados. O padrão define o que capturar; todo o restante é tratado como separador.
-- Split by whitespace
local function tokenize(s)
local tokens = {}
for token in string.gmatch(s, "%S+") do
tokens[#tokens+1] = token
end
return tokens
end
local toks = tokenize(" hello world lua ")
for i, t in ipairs(toks) do
print(i, t)
end
-- 1 hello 2 world 3 luaAnálise de parâmetros de URL
Analise cadeias de consulta iterando sobre pares de chave e valor. O padrão ([^&=]+)=([^&]+) captura cada chave e valor separados por =, entre delimitadores &.
local url_params = "name=Alice&age=30&city=Istanbul"
local params = {}
for key, value in string.gmatch(url_params, "([^&=]+)=([^&]*)") do
params[key] = value
end
print(params.name) -- Alice
print(params.age) -- 30
print(params.city) -- IstanbulRemovendo tags HTML
Uma tarefa comum de processamento de texto é remover tags HTML de uma cadeia de caracteres. Use string.gsub com um padrão que corresponda às tags de abertura e fechamento, substituindo-as por uma cadeia vazia.
local html = "<h1>Hello</h1> <p>World <b>bold</b></p>"
local plain = string.gsub(html, "<[^>]+>", "")
print(plain) -- Hello World bold
-- Replace <br> with newline
local html2 = "line1<br>line2<br/>line3"
local fixed = string.gsub(html2, "<br/?>", "\n")
print(fixed)Escapando caracteres especiais
Os caracteres especiais dos padrões de Lua são: . + * ? [ ] ^ $ % ( ). Para correspondê-los literalmente, use % como escape. Ao usar cadeias simples com esses caracteres, passe true como quarto argumento de string.find para desativar a correspondência de padrões.
-- Escape a string for use in a pattern
local function escapePattern(s)
return (string.gsub(s, "[%(%)%.%%%+%-%*%?%[%^%$]", "%%%1"))
end
local query = "1+1=2"
local pattern = escapePattern(query)
print(string.find("result: 1+1=2", pattern, 1)) -- 9 13Contando ocorrências
Use o segundo valor retornado por string.gsub (a quantidade de substituições) para contar as ocorrências de um padrão em uma cadeia de caracteres, mesmo sem fazer nenhuma substituição.
local text = "banana"
local _, count = string.gsub(text, "a", "")
print("'a' appears " .. count .. " times") -- 3
-- Count words
local sentence = "the quick brown fox"
local _, wordCount = string.gsub(sentence, "%S+", "")
print("Words:", wordCount) -- 4Verificação rápida
O que string.gsub("hello", "l", "L") retorna?
Recapitulação: gsub e gmatch
Resumo:
gsub(s, pat, repl, n)— substitui; repl pode ser uma cadeia, tabela ou função%1...%nnas cadeias de substituição referenciam capturasgmatch(s, pat)— itera sobre todas as correspondências- Use
%para escapar caracteres especiais de padrões:%.%+etc. - Conte ocorrências: segundo valor retornado por gsub
Aprenda Lua com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 40
- Aulas
- 159
Perguntas Frequentes
A aula “string.gsub e string.gmatch” é grátis?
Sim — o texto completo de “string.gsub e string.gmatch” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “string.gsub e string.gmatch”?
Substitua e percorra correspondências de padrões em cadeias. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “string.gsub e string.gmatch”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Noções básicas de cadeias: concatenação e comprimento
- Localização e extração de substrings
- string.format para saída
- string.gsub e string.gmatch