string.gsub y string.gmatch
Reemplace strings y recorra las coincidencias de patrones.
string.gsub y string.gmatch es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Conceptos básicos de string.gsub
string.gsub(s, pattern, repl, n) reemplaza las coincidencias de pattern en s por repl, hasta n veces (por defecto, todas). Devuelve la cadena resultante y el número de reemplazos realizados. El reemplazo puede ser una cadena, una tabla o una función.
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 helloReferencias a capturas en los reemplazos
En la cadena de reemplazo, %1, %2, etc. hacen referencia a las capturas del patrón. %0 hace referencia a la coincidencia completa. Utilícelo para reorganizar o envolver el texto coincidente.
-- 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]Una función como reemplazo
Cuando el reemplazo es una función, gsub la llama con cada coincidencia (o sus capturas) y utiliza el valor devuelto como reemplazo. Devuelva nil o false para conservar la coincidencia original. Esto permite realizar reemplazos dinámicos calculados.
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 c6Una tabla como reemplazo
Cuando el reemplazo es una tabla, gsub busca cada coincidencia (o la primera captura) en la tabla y utiliza el resultado. Si la búsqueda devuelve nil o false, se conserva la coincidencia original. Es ideal para diccionarios de sustitución.
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 tableConceptos básicos de string.gmatch
string.gmatch(s, pattern) devuelve un iterador sobre todas las coincidencias de pattern en s. Cada llamada al iterador devuelve la siguiente coincidencia (o las capturas si el patrón las contiene). Es la forma idiomática de iterar sobre coincidencias en 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)
endTokenización con gmatch
Utilice string.gmatch para tokenizar la entrada: dividir por espacios en blanco, analizar filas CSV o extraer datos estructurados. El patrón define qué se debe capturar; todo lo demás se trata 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 luaAnalizar parámetros de URL
Analice las cadenas de consulta iterando sobre pares clave-valor. El patrón ([^&=]+)=([^&]+) captura cada clave y 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) -- IstanbulEliminar etiquetas HTML
Una tarea habitual de procesamiento de texto es eliminar las etiquetas HTML de una cadena. Utilice string.gsub con un patrón que coincida con las etiquetas de apertura y cierre, y reemplácelas por una cadena vacía.
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)Escapar caracteres mágicos
Los caracteres mágicos de los patrones de Lua son: . + * ? [ ] ^ $ % ( ). Para hacerlos coincidir literalmente, escápelos con %. Al utilizar cadenas literales que contengan estos caracteres, pase true como cuarto argumento a string.find para desactivar la búsqueda mediante patrones.
-- 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 13Contar apariciones
Utilice el segundo valor devuelto por string.gsub (el número de reemplazos) para contar las apariciones de un patrón en una cadena, incluso sin realizar ningún reemplazo.
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) -- 4Comprobación rápida
¿Qué devuelve string.gsub("hello", "l", "L")?
Repaso: gsub y gmatch
Resumen:
gsub(s, pat, repl, n)— reemplaza; repl puede ser una cadena, tabla o función%1...%nen las cadenas de reemplazo hacen referencia a las capturasgmatch(s, pat)— itera sobre todas las coincidencias- Utilice
%para escapar caracteres mágicos de los patrones:%.,%+, etc. - Cuente las apariciones con el segundo valor devuelto por gsub
Preguntas frecuentes
¿La lección «string.gsub y string.gmatch» es gratis?
Sí — el texto completo de «string.gsub y string.gmatch» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «string.gsub y string.gmatch»?
Reemplace strings y recorra las coincidencias de patrones. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «string.gsub y string.gmatch»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos de strings: concatenación y longitud
- Búsqueda y extracción de substrings
- string.format para la salida
- string.gsub y string.gmatch