Menu
Coddy logo textTech

Iteração com string.gmatch()

Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 39 de 54.

Enquanto o string.match() encontra a primeira ocorrência de um padrão, e se você precisar encontrar todas as correspondências em uma string? A função string.gmatch() resolve isso retornando um iterador que você pode usar em um loop for para processar cada correspondência uma por uma.

A sintaxe básica é a seguinte:

for match in string.gmatch(text, pattern) do
    -- processar cada correspondência
end

Aqui está um exemplo que encontra todos os números em uma string:

local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
    print(number)
end
-- Saída:
-- 3
-- 5

O padrão %d+ corresponde a um ou mais dígitos, e o loop é executado uma vez para cada número encontrado.

Você também pode extrair todas as palavras de uma frase:

local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
    print(word)
end
-- Output:
-- Lua
-- is
-- a
-- powerful
-- language
challenge icon

Desafio

Fácil

Escreva uma função extractHashtags que receba text e retorne todas as hashtags encontradas no texto, cada uma em uma linha separada.

Use string.gmatch() para encontrar todas as hashtags no texto. Uma hashtag começa com # seguida por uma ou mais letras.

Lógica:

  • Use string.gmatch() com o padrão "#%a+" para encontrar todas as hashtags
  • Itere por cada correspondência e as colete
  • Junte todas as hashtags com caracteres de nova linha (\n)
  • Se nenhuma hashtag for encontrada, retorne uma string vazia

Parâmetros:

  • text (string): O texto para pesquisar por hashtags

Retorna: Todas as hashtags encontradas, cada uma em uma linha separada. Se não existirem hashtags, retorne uma string vazia (string)

Folha de consulta

A função string.gmatch() retorna um iterador que encontra todas as ocorrências de um padrão em uma string, permitindo que você processe cada correspondência em um loop for.

Sintaxe básica:

for match in string.gmatch(text, pattern) do
    -- processa cada correspondência
end

Exemplo encontrando todos os números:

local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
    print(number)
end
-- Saída:
-- 3
-- 5

Exemplo extraindo todas as palavras:

local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
    print(word)
end
-- Saída:
-- Lua
-- is
-- a
-- powerful
-- language

Experimente você mesmo

function extractHashtags(text)
    -- Escreva o código aqui
end
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow