Módulo de cadenas
El módulo string proporciona funciones utilitarias para la manipulación de cadenas en Lua, complementando las funciones nativas del lenguaje.
Importante: Este módulo extiende la tabla string estándar de Lua, por lo tanto las funciones se acceden a través de la tabla global string (ej: string.split()).
Funciones disponibles
Sección titulada «Funciones disponibles»1. string.split(s, sep)
Sección titulada «1. string.split(s, sep)»Divide una cadena en subcadenas basándose en un separador especificado.
Parámetros:
Sección titulada «Parámetros:»-
s (string): La cadena original que será dividida
-
sep (string): El separador usado para dividir la cadena
Retorno:
Sección titulada «Retorno:»- table: Un array (tabla indexada numéricamente) que contiene todas las subcadenas resultantes de la división
Comportamiento:
Sección titulada «Comportamiento:»-
Si el separador es una cadena vacía (
""), la función devuelve un array con cada carácter individual -
Si el separador no se encuentra en la cadena, devuelve un array que contiene solo la cadena original
-
La división se realiza en todas las ocurrencias del separador
Ejemplo de uso:
Sección titulada «Ejemplo de uso:»-- Dividir una cadena por comalocal resultado = string.split("maçã,banana,laranja,uva", ",")-- resultado = {"maçã", "banana", "laranja", "uva"}
-- Dividir por espaciolocal palabras = string.split("Olá mundo do Lua", " ")-- palabras = {"Olá", "mundo", "do", "Lua"}
-- Dividir por nueva línea (procesamiento de logs)local linhas = string.split("2024-01-15 ERROR: Falha na conexão\n2024-01-15 INFO: Reconectando", "\n")-- linhas = {"2024-01-15 ERROR: Falha na conexão", "2024-01-15 INFO: Reconectando"}
-- Separador vacío (dividir en caracteres)local chars = string.split("teste", "")-- chars = {"t", "e", "s", "t", "e"}
-- Separador no encontradolocal unico = string.split("texto_sem_separador", "|")-- unico = {"texto_sem_separador"}2. string.trim(s)
Sección titulada «2. string.trim(s)»Elimina espacios en blanco (whitespace) del inicio y del final de una cadena.
Parámetros:
Sección titulada «Parámetros:»- s (string): La cadena que será limpiada
Retorno:
Sección titulada «Retorno:»- string: La cadena original sin espacios en blanco al inicio ni al final
Comportamiento:
Sección titulada «Comportamiento:»-
Elimina espacios (
), tabs (\t), saltos de línea (\n), retornos de carro (\r) -
No elimina espacios en el medio de la cadena
-
Devuelve cadena vacía si la entrada contiene solo espacios en blanco
Ejemplo de uso:
Sección titulada «Ejemplo de uso:»-- Eliminar espacios extralocal limpo = string.trim(" texto com espaços ")-- limpo = "texto com espaços"
-- Limpiar entrada de usuariolocal entrada = "\t\n valor digitado \r\n"local processado = string.trim(entrada)-- processado = "valor digitado"
-- Procesar configuracioneslocal config_line = " timeout = 30 "local chave_valor = string.trim(config_line)-- chave_valor = "timeout = 30"
-- Cadena solo con espacioslocal vazio = string.trim(" \t\n ")-- vazio = ""3. string.starts(String, Start)
Sección titulada «3. string.starts(String, Start)»Verifica si una cadena comienza con un prefijo específico.
Parámetros:
Sección titulada «Parámetros:»-
String (string): La cadena a verificar
-
Start (string): El prefijo a buscar al inicio de la cadena
Retorno:
Sección titulada «Retorno:»- boolean:
truesi la cadena comienza con el prefijo especificado,falseen caso contrario
Comportamiento:
Sección titulada «Comportamiento:»-
La comparación distingue mayúsculas y minúsculas (case-sensitive)
-
Devuelve
truesi el prefijo es una cadena vacía ("") -
Funciona con cadenas multibyte (UTF-8)
Ejemplo de uso:
Sección titulada «Ejemplo de uso:»-- Verificar si una cadena comienza con "http"local url = "https://example.com"local is_http = string.starts(url, "http")-- is_http = true
-- Verificar prefijo en rutas de archivolocal path = "/var/log/app.log"local is_absolute = string.starts(path, "/")-- is_absolute = true
-- Verificar en procesamiento de logslocal log_line = "ERROR: Database connection failed"local is_error = string.starts(log_line, "ERROR:")-- is_error = true
-- Prefijo vacío siempre devuelve truelocal always_true = string.starts("qualquer string", "")-- always_true = true
-- Case-sensitivelocal case_check = string.starts("Hello World", "hello")-- case_check = false (distingue mayúsculas/minúsculas)4. string.ends(string, end)
Sección titulada «4. string.ends(string, end)»Verifica si una cadena termina con un sufijo específico.
Parámetros:
Sección titulada «Parámetros:»-
string (string): La cadena a verificar
-
end (string): El sufijo a buscar al final de la cadena
Retorno:
Sección titulada «Retorno:»- boolean:
truesi la cadena termina con el sufijo especificado,falseen caso contrario
Comportamiento:
Sección titulada «Comportamiento:»-
La comparación distingue mayúsculas y minúsculas (case-sensitive)
-
Devuelve
truesi el sufijo es una cadena vacía ("") -
Funciona con cadenas multibyte (UTF-8)
Ejemplo de uso:
Sección titulada «Ejemplo de uso:»-- Verificar extensión de archivolocal filename = "document.pdf"local is_pdf = string.ends(filename, ".pdf")-- is_pdf = true
-- Verificar sufijo en URLslocal url = "https://api.example.com/v1/data.json"local is_json = string.ends(url, ".json")-- is_json = true
-- Verificar terminación en cadenas de loglocal log_entry = "Process completed successfully."local is_success = string.ends(log_entry, "successfully.")-- is_success = true
-- Sufijo vacío siempre devuelve truelocal always_true = string.ends("qualquer string", "")-- always_true = true
-- Case-sensitivelocal case_check = string.ends("Hello World", "world")-- case_check = false (distingue mayúsculas/minúsculas)Ventajas del Módulo String de Monsta:
Sección titulada «Ventajas del Módulo String de Monsta:»-
string.split()- No existe nativamente en Lua, necesita implementarse manualmente -
string.trim()- Más eficiente que implementaciones en Lua puro -
Consistencia - Misma interfaz para todas las funciones
Funciones complementarias:
Sección titulada «Funciones complementarias:»Úselo en conjunto con funciones nativas de Lua:
-
string.find()- Para búsquedas complejas -
string.gsub()- Para substituciones -
string.match()- Para extracción con patrones -
string.gmatch()- Para iteración sobre patrones
Ejemplos completos
Sección titulada «Ejemplos completos»Ejemplo 1: Procesamiento de log del sistema
Sección titulada «Ejemplo 1: Procesamiento de log del sistema»-- Simular lectura del log del sistemalocal log_data = [[Jan 15 10:30:45 servidor kernel: [12345.67890] CPU temperature: 65.5CJan 15 10:31:15 servidor sshd[1234]: Accepted password for user from 192.168.1.100Jan 15 10:32:00 servidor crond[5678]: (root) CMD (/usr/bin/backup.sh)]]
-- Procesar cada línea del loglocal function analisar_logs(logs) local eventos = {}
for linha in string.gmatch(logs, "[^\n]+") do local linha_limpa = string.trim(linha) if linha_limpa ~= "" then -- Dividir por espacios (formato syslog) local partes = string.split(linha_limpa, " ")
if #partes >= 5 then local evento = { data = partes[1] .. " " .. partes[2] .. " " .. partes[3], host = partes[4], servico = partes[5], mensagem = table.concat(partes, " ", 6) } table.insert(eventos, evento) end end end
return eventosend
local eventos = analisar_logs(log_data)Ejemplo 2: Parser de configuración simple
Sección titulada «Ejemplo 2: Parser de configuración simple»-- Parser para archivos de configuración en el formato clave=valorlocal function parse_config(conteudo) local config = {}
for linha in string.gmatch(conteudo, "[^\n]+") do local linha_limpa = string.trim(linha)
-- Ignorar líneas vacías y comentarios if linha_limpa ~= "" and not string.starts(linha_limpa, "#") then -- Dividir por "=" local partes = string.split(linha_limpa, "=")
if #partes == 2 then local chave = string.trim(partes[1]) local valor = string.trim(partes[2])
-- Eliminar comillas si existen if string.starts(valor, "\"") and string.ends(valor, "\"") then valor = string.sub(valor, 2, -2) end
config[chave] = valor end end end
return configend
-- Ejemplo de usolocal config_text = [[# Configuraciones del monitorhostname = "servidor-prod"port = 8080timeout = 30debug = false]]
local config = parse_config(config_text)-- config.hostname = "servidor-prod", config.port = "8080", etc.