Menu
Coddy logo textTech

Iteración con string.gmatch()

Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 39 de 54.

Mientras que string.match() encuentra la primera coincidencia de un patrón, ¿qué pasa si necesitas encontrar todas las coincidencias en una cadena? La función string.gmatch() resuelve esto devolviendo un iterador que puedes usar en un bucle for para procesar cada coincidencia una por una.

La sintaxis básica se ve así:

for match in string.gmatch(text, pattern) do
    -- procesar cada coincidencia
end

Aquí tienes un ejemplo que encuentra todos los números en una cadena:

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

El patrón %d+ coincide con uno o más dígitos, y el bucle se ejecuta una vez por cada número encontrado.

También puedes extraer todas las palabras de una oración:

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

Desafío

Fácil

Escribe una función extractHashtags que reciba text y devuelva todos los hashtags encontrados en el texto, cada uno en una línea separada.

Usa string.gmatch() para encontrar todos los hashtags en el texto. Un hashtag comienza con # seguido de una o más letras.

Lógica:

  • Usa string.gmatch() con el patrón "#%a+" para encontrar todos los hashtags
  • Itera a través de cada coincidencia y recoléctalas
  • Une todos los hashtags con caracteres de nueva línea (\n)
  • Si no se encuentran hashtags, devuelve una cadena vacía

Parámetros:

  • text (string): El texto en el que buscar hashtags

Devuelve: Todos los hashtags encontrados, cada uno en una línea separada. Si no existen hashtags, devuelve una cadena vacía (string)

Hoja de referencia

La función string.gmatch() devuelve un iterador que encuentra todas las ocurrencias de un patrón en una cadena, permitiéndote procesar cada coincidencia en un bucle for.

Sintaxis básica:

for match in string.gmatch(text, pattern) do
    -- procesar cada coincidencia
end

Ejemplo para encontrar todos los números:

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

Ejemplo para extraer todas las palabras:

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

Pruébalo tú mismo

function extractHashtags(text)
    -- Escribe el código aquí
end
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow