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
endAquí 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
-- 5El 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
-- languageDesafío
FácilEscribe 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
endEjemplo 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
-- 5Ejemplo 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
-- languagePruébalo tú mismo
function extractHashtags(text)
-- Escribe el código aquí
end
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Iteración avanzada de tablas
Iterar con pairs()Iterar con ipairs()pairs() vs. ipairs()Resumen - Ficha de personaje4Introducción a las Metatablas
¿Qué es una Metatabla?setmetatable y getmetatableEl metamétodo __indexEl metamétodo __newindexEl metamétodo __tostringMetamétodos aritméticos - Parte 1Metamétodos aritméticos - Parte 2Resumen - Tablas de solo lectura7Manipulación avanzada de cadenas
string.gsub() para sustituciónIntroducción a patrones de cadenasstring.find()string.match()Iteración con string.gmatch()Resumen - Analizador de archivos Log2Más funciones de la librería table
table.concat()Construcción de tablas y unpack()table.sort()Ordenamiento personalizado con funcionesRepaso - Tabla de puntuaciones altas