Menu
CoddyTech

string.find()

Parte de la sección Fundamentos del Journey de Lua de Coddy. Lección 48 de 90.

La función string.find() es una herramienta potente para buscar dentro de cadenas. Te permite buscar una cadena más pequeña (llamada patrón) dentro de una cadena más grande y te indica exactamente dónde se encontró.

Esta es la sintaxis básica:

string.find(text, pattern)

Cuando string.find() encuentra correctamente el patrón, devuelve dos números: la posición inicial y la posición final de la coincidencia. Si no se encuentra el patrón, devuelve nil.

Aquí tienes un ejemplo sencillo:

local sentence = "The treasure is hidden here"
local start_pos, end_pos = string.find(sentence, "treasure")
print(start_pos, end_pos)  -- muestra: 5 12

En este ejemplo, la palabra "treasure" empieza en la posición 5 y termina en la posición 12 de la oración.

Algo que debes saber: el texto que buscas es un patrón, no texto sin formato. Algunos caracteres tienen significados especiales en los patrones: . % - + * ? [ ] ^ $ ( ). Los aprenderás más adelante en el curso. Las letras, los dígitos y los espacios coinciden consigo mismos, como en el ejemplo anterior, pero un carácter especial puede coincidir con más de lo que pretendías:

print(string.find("Score: 105", "1.5"))  -- devuelve: 8 10 (el . coincidió con el 0)

Para buscar el texto exactamente como está escrito, añade dos argumentos más: 1 (empezar por el primer carácter) y true (una búsqueda literal, sin caracteres especiales):

print(string.find("Score: 105", "1.5", 1, true))   -- muestra: nil
print(string.find("Version 1.5", "1.5", 1, true))  -- muestra: 9 11
challenge icon

Desafío

Fácil

Crea un detector de mensajes secretos que busque una palabra clave oculta dentro de un mensaje de texto más extenso. Declara una variable llamada message y asígnale el valor "The ancient treasure lies beneath the old oak tree". Usa la función string.find() para buscar la palabra "treasure" dentro del mensaje y guarda las posiciones inicial y final en variables llamadas startPos y endPos. Imprime ambos valores de posición en líneas separadas.

Pruébalo tú mismo

-- Declara la variable message
local message = "The ancient treasure lies beneath the old oak tree"

-- TODO: Escribe tu código aquí para encontrar la palabra "treasure" y almacenar las posiciones

-- Imprime las posiciones
print(startPos)
print(endPos)
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 Fundamentos

Practica por tu cuenta: Compilador de Lua online