0Pricing
Lua Academy · Lección

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 hello

Referencias 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 c6

Una 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 table

Conceptos 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)
end

Tokenizació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 lua

Analizar 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)  -- Istanbul

Eliminar 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  13

Contar 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)  -- 4

Comprobació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...%n en las cadenas de reemplazo hacen referencia a las capturas
  • gmatch(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

  1. Conceptos básicos de strings: concatenación y longitud
  2. Búsqueda y extracción de substrings
  3. string.format para la salida
  4. string.gsub y string.gmatch
← Volver a Lua Academy