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
endAqui 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
-- 5O 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
-- languageDesafio
FácilEscreva 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
endExemplo 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
-- 5Exemplo 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
-- languageExperimente você mesmo
function extractHashtags(text)
-- Escreva o código aqui
end
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
1Iteração Avançada de Tabelas
Iterando com pairs()Iterando com ipairs()pairs() vs. ipairs()Revisão - Ficha de Personagem4Introdução às Metatabelas
O que é uma Metatabela?setmetatable & getmetatableO Metamétodo __indexO Metamétodo __newindexO Metamétodo __tostringMetamétodos Aritméticos Parte 1Metamétodos Aritméticos Parte 2Recapitulação - Tabela Somente Leitura7Manipulação Avançada de Strings
string.gsub() para SubstituiçãoIntrodução a Padrões de Stringstring.find()string.match()Iteração com string.gmatch()Recapitulação - Parser de Arquivos de Log2Mais Funções da Biblioteca Table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRecapitulação - Placar de recordes