Cuerdas

Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

El tipo de datos string es una secuencia de caracteres, como letras, números y símbolos. Es el tipo de datos para almacenar la mayoría de la información basada en texto.

Declarando cadenas

Para declarar una variable de cadena, coloque comillas alrededor de los caracteres. Es más común usar comillas dobles (" ), pero las comillas individuales (' ) también funcionan. Si desea incluir una cita única o doble en su cadena, envuelva su cadena alrededor del otro tipo de cita, o use una cita escapada .


local string1 = "Hello world!"
print(string1) --> ¡Hola mundo!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Para incluir comillas simples y dobles en una cadena, o para crear cadenas de varias líneas, declarelas usando paréntesis dobles:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Hola
--> mundo!
--> ¡Hola "mundo"!
--> Hello 'world'!

Si es necesario, puede anidar múltiples brackets dentro de una cadena usando el mismo número de signos iguales tanto en el comienzo como en el final:


local string1 = [=[Hello
[[world!]]
]=]
print(string1)
--> Hola
--> [[world!]]

Combinando cuerdas

Para combinar cadenas, concatena con dos puntos (.. ). Las cadenas concatenadas no insertan un espacio entre ellas, por lo que necesitarás incluir espacios al final / comienzo de una cadena anterior / subsecuente, o concatenar un espacio entre las dos cadenas.


local hello = "Hello"
local helloWithSpace = "Hello "
local world = "world!"
local string1 = hello .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(string1) --> ¡Helloworld!
print(string2) --> ¡Hola mundo!
print(string3) --> Hello world!

Tenga en cuenta que el comando print() toma múltiples argumentos y los combina con espacios , por lo que puede usar , en lugar de .. para generar espacios en las salidas print().


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> ¡Helloworld!
print(hello, world .. exclamationMark) --> ¡Hola mundo!
print(hello, world, exclamationMark) --> Hello world !

Convertiendo Cuerdas

Para convertir una cadena a un número, use la función tonumber(). Si la cadena no tiene una representación numérica, tonumber() devuelve nil.


local numericString = "123"
print(tonumber(numericString)) -->123
local alphanumericString = "Hello123"
print(tonumber(alphanumericString)) --> nil

Cuerdas de escape

Para escapar de una declaración de cadena de comillas dobles o únicas e insertar casi cualquier carácter, coloque una barra invertida (\ ) antes del carácter. Por ejemplo:

  • Para incrustar una única cita en una cadena de una sola cita, use \' .
  • Para incrustar una cita doble en una cadena de doble cita, use \" .

local string1 = 'Hello \'world\'!'
print(string1) --> ¡Hola mundo!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

Ciertos personajes que siguen guiones invertidos producen personajes especiales en lugar de personajes escapados:

  • Para incrustar una nueva línea, use \n .
  • Para incrustar una pestaña horizontal, use \t .

local string1 = "Hello\nworld!"
print(string1)
--> Hola
--> mundo!
local string2 = "Hello\tworld!"
print(string2) --> Hello world!

Interpolación de cadenas

Luau es compatible con la interpolación de cadenas **** , una función que te permite insertar expresiones en cadenas. Usa contraseñas (` ) para declarar una cadena interpolada, luego añade expresiones dentro de paréntesis:


local world = "world"
local string1 = `Hello {world}!`
print(string1) --> Hello world!

Aunque las variables son el uso más común, puede usar cualquier expresión, incluida la matemática:


local world = "world"
local number = 1
local letters = {"w", "o", "r", "l", "d"}
local string1 = `Hello {world}, {number} time!`
local string2 = `Hello {world}, {number + 1} times!`
local string3 = `Hello {table.concat(letters)} a third time!`
print(string1) --> ¡Hola mundo, 1 vez!
print(string2) --> ¡Hola mundo, 2 veces!
print(string3) --> Hello world a third time!

Las reglas de escape estándar se aplican a los backticks, brackets curly y backslashes:


local string1 = `Hello \`\{world\}\`!`
print(string1) --> Hello `{world}`!

Conversión de Matemáticas

Si realiza operaciones matemáticas en una cadena, Luau convierte automáticamente la cadena a un número. Si la cadena no tiene una representación de número, arroja un error.


print("55" + 10) --más de 65
print("55" - 10) --más de 45
print("55" * 10) --más de 550
print("55" / 10) --> 5,5
print("55" % 10) --> 5 años
print("Hello" + 10) --> print("Hello" + 10):1: attempt to perform arithmetic (add) on string and number

Referencia del patrón de cuerda

Un patrón de cadena **** es una combinación de caracteres que puedes usar con string.match() , string.gmatch() , y otras funciones para encontrar una pieza, o subcadena, de una cadena más larga.

Partidas Directas

Puedes usar coincidirdirectas en una función de Luau como string.match(), excepto para caracteres mágicos. Por ejemplo, estos comandos buscan la palabra Roblox dentro de una cadena:


local match1 = string.match("Welcome to Roblox!", "Roblox")
local match2 = string.match("Welcome to my awesome game!", "Roblox")
print(match1) --> Roblox
print(match2) --> nil

Clases de Personajes

Las clases de caracteres son esenciales para búsquedas de cadenas más avanzadas. Puede usarlas para buscar algo que no sea necesariamente específico del carácter pero que se ajuste a una categoría conocida (clase), que incluye letras , dígitos , espacios , puntuación , y más.

La siguiente tabla muestra las clases de caracteres oficiales para los patrones de cuerdas de Luau:

ClaseRepresentaPartida de ejemplo
.Cualquier personaje32kasGJ1%fTlk?
%aUna letra mayúscula o minúsculaaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lUna letra minúsculaabcdefghijklmnopqrstuvwxyz
%uUna carta mayúsculaABCDEFGHIJKLMNOPQRSTUVWXYZ
%dCualquier dígito (número)0123456789
%pCualquier carácter de puntuación¡@#;,.
%wUn carácter alfanumérico (ya sea una letra o un número)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sUn carácter de espacio o espacios en blanco, \n y \r
%cUn personaje de control especial
%xUn carácter hexadecimal0123456789ABCDEF
%zEl carácter NULL ( \0 )

Para las clases de caracteres de una sola letra como %a y %s, la letra mayúscula correspondiente representa el "opuesto" de la clase. Por instancia, %p representa un carácter de puntuación, mientras que %P representa todos los caracteres excepto la puntuación.

Personajes mágicos

Hay 12 "personajes mágicos" que están reservados para propósitos especiales en los patrones:

$%^*()
.[]+-¿?

Puedes escapar y buscar personajes mágicos usando el símbolo %. Por ejemplo, para buscar roblox.com , escapa del símbolo . (periodo) precediéndolo con un % como en %..


-- "roblox.com" coincide con "roblox#com" porque el período se interpreta como "cualquier personaje"
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Escapa el período con % por lo que se interpreta como un carácter de período literal
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Anclas

Puedes buscar un patrón al principio o al final de una cadena usando los símbolos ^ y $.


local start1 = string.match("first second third", "^first") -- Partidos porque "primero" está al principio
print(start1) --> primero
local start2 = string.match("third second first", "^first") -- No coincide porque "primero" no está al principio
print(start2) --> cero
local end1 = string.match("first second third", "third$") -- Partidos porque el "tercer" está al finalizar
print(end1) --> tercero
local end2 = string.match("third second first", "third$") -- No coincide porque "tercer" no está al finalizar
print(end2) --> nil

También puedes usar ambos ^ y $ juntos para asegurar que un patrón solo coincida con la cadena completa y no solo con una parte de ella.


-- Usando ^ y $ para hacer coincidir una cadena completa
local match1 = string.match("Roblox", "^Roblox$") -- Coincide porque "Roblox" es la cadena completa (igualdad)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- No coincide porque "Roblox" no está al principio Y al finalizar
print(match2) --> cero
local match3 = string.match("I play Roblox", "Roblox") -- Partidos porque "Roblox" está contenido dentro de "Jago Roblox"
print(match3) --> Roblox

Modificadores de Clase

Por sí misma, una clase de carácter solo coincide con un carácter en una cadena. Por instancia, el siguiente patrón ("%d" ) comienza a leer la cadena de izquierda a derecha, encuentra el primer dígito (2 ) y se detiene.


local match = string.match("The Cloud Kingdom has 25 power gems", "%d")
print(match) --> 2

Puedes usar modificadores con cualquier clase de carácter para controlar el resultado:

QuantificadorSignificado
+Combina 1 o más de la clase de personaje anterior
-Coincide con la menor cantidad posible de la clase de personaje anterior
*Combina 0 o más de la clase de personaje anterior
¿?Combina 1 o menos de la clase de personaje anterior
%nPara n entre 1 y 9 , coincide con un substring igual a la cadena capturada n.
%bxyLa captura equilibrada que coincide con x , y , y todo lo demás (por ejemplo, %b () coincide con un par de paréntesis y todo lo demás)

Añadiendo un modificador al mismo patrón ("%d+" en lugar de "%d"), produce 25 en lugar de 2:


local match1 = string.match("The Cloud Kingdom has 25 power gems", "%d")
print(match1) -->2 años
local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")
print(match2) --> 25

Conjuntos de clase

Los conjuntos deben usarse cuando una sola clase de caracteres no puede hacer todo el trabajo. Por instancia, es posible que desee combinar ambas letras minúsculas (%l ) y caracteres de puntuación (%p ) usando un solo patrón.

Los conjuntos se definen entre paréntesis [] a su alrededor. En el siguiente ejemplo, observe la diferencia entre usar un conjunto ("[%l%p]+" ) y no usando un conjunto ("%l%p+" ).


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Establecer
print(match1) --> ¡¡¡eso!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- No establecido
print(match2) --> o!!!

El primer comando (establecer) le dice a Luau que encuentre caracteres minúsculos y puntuación. Con el + cuantificador agregado después de todo el establecer, encuentra todos los de esos caracteres (ello!!!), deteniéndose cuando alcanza el espacio.

En el segundo comando (no establecido), el + cuantificador solo se aplica a la %p clase antes de él, por lo que Luau solo toma el primer carácter minúsculo (o ) antes de la serie de puntuación (!!! ).

Al igual que las Clasesde caracteres, los conjuntos pueden ser "opuestos" de sí mismos. Esto se hace agregando un carácter ^ al principio del establecer, directamente después de la apertura [ . Por instancia, "[%p%s]+" representa tanto la puntuación como los espacios, mientras que "[^%p%s]+" representa todos los caracteres excepto la puntuación y los espacios.

Los conjuntos también admiten rangos **** , lo que le permite encontrar una gama completa de coincidencias entre un carácter inicial y final. Esta es una función avanzada que se describe con más detalle en el Manual de Lua 5.1.

Capturas de cuerda

Las capturas de cadena **** son sub-patterns dentro de un patrón. Estos están encerrados en paréntesis () y se usan para obtener (capturar) substrings coincidentes y guardarlos como variables. Por ejemplo, el siguiente patrón contiene dos capturas, (%a+) y (%d+), que devuelven dos substrings después de una coincidirexitosa.


local pattern = "(%a+)%s?=%s?(%d+)"
local key1, val1 = string.match("TwentyOne = 21", pattern)
print(key1, val1) --> Veinte y Uno 21
local key2, val2 = string.match("TwoThousand= 2000", pattern)
print(key2, val2) --> Dos Mil 2000
local key3, val3 = string.match("OneMillion=1000000", pattern)
print(key3, val3) --> OneMillion 1000000

En el patrón anterior, el ? cuantificador que sigue a ambas %s clases es una adición segura porque hace que el espacio en ambos lados del signo = sea opcional. Eso significa que la partida tiene éxito si falta uno (o ambos) espacios alrededor del signo de igual.

Las capturas de cadenas también pueden ser anidadas como el siguiente ejemplo:


local places = "The Cloud Kingdom is heavenly, The Forest Kingdom is peaceful"
local pattern = "(The%s(%a+%sKingdom)[%w%s]+)"
for description, kingdom in string.gmatch(places, pattern) do
print(description)
print(kingdom)
end
--> El Reino de la Nube es celestial
--> Reino de la Nube
--> El Reino del Bosque es pacífico
--> Forest Kingdom

Esta búsqueda de patrones funciona de la siguiente manera:

El string.gmatch() iterador busca una coincidencia en todo el patrón de "descripción" definido por el par de paréntesis exteriores. Esto se detiene en la primera coma y captura lo siguiendo:

#PatrónCaptura
1(El%s(%a+%sReino)[%w%s]+)El Reino de la Nube es celestial

Usando su primera capturarexitosa, el iterador busca una coincidencia en el patrón "reino" definido por el par de paréntesis internos. Este patrón anidado simplemente captura lo siguiendo:

#PatrónCaptura
2(%a+%sReino)Reino de la Nube

El iterador luego sale y continúa buscando la cadena completa, capturando lo siguiendo:

#PatrónCaptura
3(El%s(%a+%sReino)[%w%s]+)El Reino del Bosque es pacífico
4(%a+%sReino)Reino Forestal