Menu
Coddy logo textTech

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: 100

El 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: Alice

Aquí, 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.

challenge icon

Desafío

Fácil

Escribe 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: 100

El 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 letras

Usa 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: Alice

Las 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
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