Lua Academy · Aula

string.gsub e string.gmatch

Substitua e percorra correspondências de padrões em cadeias.

Aula 4 de 412 etapas

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 hello

Referê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 c6

Tabela 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 table

Fundamentos 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)
end

Tokenizaçã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 lua

Aná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)  -- Istanbul

Removendo 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  13

Contando 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)  -- 4

Verificaçã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...%n nas cadeias de substituição referenciam capturas
  • gmatch(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
Grátis para começar

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

  1. Noções básicas de cadeias: concatenação e comprimento
  2. Localização e extração de substrings
  3. string.format para saída
  4. string.gsub e string.gmatch
← Voltar para Lua Academy