string.match()
Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 38 de 54.
Mientras que string.find() te indica dónde aparece un patrón en una cadena, a veces necesitas extraer el texto real que coincidió. Aquí es donde entra en juego string.match(), y se vuelve aún más potente cuando se combina con capturas.
Las capturas te permiten marcar partes específicas de un patrón que deseas extraer. Creas una captura envolviendo parte de tu patrón entre paréntesis (). Cuando string.match() encuentra una coincidencia, devuelve el texto capturado en lugar de solo la posición.
Aquí tienes un ejemplo sencillo de cómo extraer un número de una cadena:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Salida: 100El patrón %d+ significa "uno o más dígitos". El + es un modificador que coincide con uno o más de la clase de caracteres precedente, permitiéndote capturar números de varios dígitos.
Puedes usar capturas para extraer partes específicas de un patrón más complejo:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Salida: AliceAquí, los paréntesis alrededor de %a+ le indican a Lua que capture la secuencia de letras que viene después de "User: ". El resto del patrón ayuda a localizar la posición correcta, pero solo se devuelve la parte capturada.
Si tu patrón tiene múltiples capturas, string.match() devuelve todas ellas como valores separados, que puedes asignar a múltiples variables a la vez.
Desafío
FácilEscribe una función extractPrice que recibe text y devuelve el valor del precio encontrado en la cadena.
Usa string.match() con un patrón de captura para extraer el precio numérico que aparece después del signo de dólar. El patrón debe capturar uno o más dígitos usando %d+.
Parámetros:
text(string): Una cadena que contiene un precio en el formato "Price: $XX"
Devuelve: El precio numérico como una cadena (string)
Hoja de referencia
Usa string.match() para extraer texto que coincida con un patrón:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Salida: 100El modificador + coincide con uno o más de la clase de caracteres precedente:
%d+ -- uno o más dígitos
%a+ -- una o más letrasUsa paréntesis () para crear capturas que extraigan partes específicas de un patrón:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Salida: AliceLas capturas múltiples devuelven valores separados:
local var1, var2 = string.match(text, "(pattern1)(pattern2)")Pruébalo tú mismo
function extractPrice(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