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 texto 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.

Declarar cadenas

Para declarar una variable de cadena, pon comillas alrededor de los caracteres.Es más común usar citas dobles ( " ), pero las citas únicas ( ' ) también funcionan.Si quieres incluir una cita simple o doble en tu cadena, envuelve tu cadena alrededor del otro tipo de cita o usa una cita escapada.


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

Para incluir tanto citas únicas como dobles en una cadena, o para crear cadenas de múltiples líneas, declarearlas usando paréntesis dobles:


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

Si es necesario, puedes anidar múltiples paréntesis dentro de una cadena usando el mismo número de signos iguales en ambos paréntesis de inicio y final:


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

Combinar cadenas

Para combinar cadenas, concatenarlas con dos puntos ( .. ).La concatenación de cadenas no inserta un espacio entre ellas, por lo que tendrás que incluir espacio(s) al final/principio de una cadena anterior/siguiente 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 print() salidas.


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 !

Convertir cadenas

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

Escapar cadenas

Para escapar una declaración de cadena doble o simple y embocar casi cualquier personaje, pon un guión trasero ( \ ) antes del personaje.Por ejemplo:

  • Para incrustar una sola cita en una cadena de una sola cita, utilice \' .
  • Para incrustar una cita doble en una cadena de citas dobles, utilice \" .

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

Ciertos personajes que siguen a los guiones de retroceso producen caracteres especiales en lugar de caracteres escapados:

  • Para incrustar una nueva línea, utilice \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ónde cadenas

Luau soporta interpolación de cadenas , una característica que te permite insertar expresiones en cadenas.Usa backticks ( ` ) para declarar una cadena interpolada, luego añade expresiones dentro de corchetes curly:


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

Aunque las variables son el uso más común, puedes 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!

Se aplican las reglas de escape estándar para los guiones, los corchetes curly y las espadas de retroceso:


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

Conversión de matemáticas

Si realizas operaciones matemáticas en una cadena, Luau convierte automáticamente la cadena a un número.Si la cadena no tiene una representación numérica, lanza un error.


print("55" + 10) --> 65
print("55" - 10) --> 45
print("55" * 10) --> 550
print("55" / 10) --> 5.5
print("55" % 10) --> 5
print("Hello" + 10) --> print("Hello" + 10):1: attempt to perform arithmetic (add) on string and number

Comparaciones

Las cadenas se pueden comparar usando los operadores <, <=, > y >= que comparan usando el orden lexicográfico basado en los códigos ASCII de cada caracter en una cadena.Esto resultará en números en cadenas que no se comparan correctamente, por ejemplo, "100" será menos que "20" , ya que los bytes "0" y "1" tienen códigos ASCII más bajos que el byte "2" .


print("Apple" < "apple") --> cierto
print("Banana" < "apple") --> verdadero (B está antes de un en ASCII)
print("number100" < "number20") --> true

Referencia de patrón de cadena

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 subtexto, de una cadena más larga

Partidos directos

Puedes usar coincidencias directas en una función 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 cuerdas más avanzadas.Puedes usarlos para buscar algo que no sea necesariamente específico de caracteres, pero que encaje dentro de una categoría conocida (clase), incluidas letras , dígitos , espacios , puntuación y más.

La siguiente tabla muestra las clases de personajes oficiales para los patrones de cuerda Luau:

ClaseRepresentaEjemplo de coincidencia
.Cualquier personaje32kasGJ1%fTlk?@94
%aUna letra mayúscula o minúsculaaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lUna letra minúsculaabcdefghijklmnopqrstuvwxyz
%uUna letra mayúsculaABCDEFGHIJKLMNOPQRSTUVWXYZ
%dCualquier dígito (numbero)0123456789
%pCualquier caracter de puntuación!@#;,.
%wUn carácter alfanumérico (ya sea una letra o un número)abcdelfgihijklmnopqrsztuvwxyz0123456789
%sUn espacio o un carácter de espacio en blanco , \n , y \r
%cUn carácter de control especial
%xUn carácter hexadecimal0123456789 ABCDEF
%zEl carácter NULL ( \0 )

Para clases de caracteres de una letra como %a y %s, la letra mayúscula correspondiente representa lo "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 "caracteres mágicos" que se reservan para fines especiales en los patrones:

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

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


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

Anclajes

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


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

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


-- Usando tanto ^ como $ para coincidir en una cadena completa
local match1 = string.match("Roblox", "^Roblox$") -- Coincide porque "Roblox" es toda la cadena (igualdad)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- No coincide porque "Roblox" no está al comienzo NI al finalizar
print(match2) --> cero
local match3 = string.match("I play Roblox", "Roblox") -- Coincidencias porque "Roblox" se encuentra dentro de "Juego de Roblox"
print(match3) --> Roblox

Modificadores de clase

Por sí solo, una clase de personaje solo coincide con un caracter en una cadena.Por instancia, el siguiente patrón ( "%d" ) comienza a leer la cadena de izquierda a derecha, encuentra la primera digit ( 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 personaje para controlar el resultado:

CuantificadorSignificado
+Coincide con 1 o más de la clase de personaje anterior
-Coincide con el menor número posible de la clase de personaje anterior
*Coincide con 0 o más de la clase de caracteres anterior
?Coincide con 1 o menos de la clase de caracteres anterior
%nPara n entre 1 y 9, coincide con una subcadena igual a la n cadena capturada.
%bxyLa captura equilibrada que coincide con x , y , y todo lo que está entre (por ejemplo, %b() coincide con una pareja de paréntesis y todo lo que está entre ellos)

Añadir 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
local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")
print(match2) --> 25

Conjuntos de clases

Conjuntos debe usarse cuando una sola clase de caracteres no puede hacer todo el trabajo.Por instancia, quizás desees coincidir con ambas letras minúsculas (%l), y caracteres de puntuación (%p), usando un solo patrón.

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


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Establecer
print(match1) --> ¡¡¡ello!!!
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 busque tanto caracteres minúsculos como puntuación.Con el cuantificador + agregado después de todo el establecer, encuentra todos de esos personajes ( ello!!! ), deteniéndose cuando llega al espacio.

En el segundo comando (no establecido), el cuantificador + sólo se aplica a la clase %p antes de ella, por lo que Luau agarra sólo la primera letra minúscula ( o ) antes de la serie de puntuación ( !!! ).

Al igual que las Clasesde personajes, los conjuntos pueden ser "opuestos" entre sí.Esto se hace agregando un carácter ^ en el comienzo 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 que te permiten encontrar una gama completa de coincidencias entre un personaje inicial y final .Esta es una característica avanzada que se describe con más detalle en el Manual de Lua 5.1.

Capturas de cuerda

Las cadenas capturas son sub patrones dentro de un patrón.Estas están encerradas en paréntesis () y se usan para obtener (capturar) subcadenas coincidentes y guardarlas en variables.Por ejemplo, el siguiente patrón contiene dos capturas, (%a+) y (%d+) , que devuelven dos subcadenas al realizar una coincidirexitosa.


local pattern = "(%a+)%s?=%s?(%d+)"
local key1, val1 = string.match("TwentyOne = 21", pattern)
print(key1, val1) --> Veintiuno 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 clases %s es una adición segura porque hace que el espacio al lado del signo = sea opcional.Eso significa que la coincidencia tiene éxito si falta uno (o ambos) espacios alrededor del signo igual.

Las capturas de cuerdas 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 patrón funciona de la siguiente manera:

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

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

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

#PatrónCapturar
2(%a+%sReino)Reino de la nube

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

#PatrónCapturar
3(The%s(%a+%sKingdom)[%w%s]+)El reino del bosque es pacífico
4(%a+%sReino)Reino del bosque

Además de todo lo anterior, hay un caso especial con una captura vacía ( () ).Si una captura está vacía, entonces la posición en la cadena se capturará:


local match1 = "Where does the capture happen? Who knows!"
local match2 = "This string is longer than the first one. Where does the capture happen? Who knows?!"
local pattern = "()Where does the capture happen%? Who knows!()"
local start1, finish1 = string.match(match1, pattern)
print(start1, finish1) --> 1 42
local start2, finish2 = string.match(match2, pattern)
print(start2, finish2) --> 43 84

Estas capturas especiales pueden anidarse como las normales:


local places = "The Cloud Kingdom is heavenly, The Forest Kingdom is peaceful."
local pattern = "The (%a+()) Kingdom is %a+"
for kingdom, position in string.gmatch(places, pattern) do
print(kingdom, position)
end
--> Nube 10
--> Forest 42

Los valores devueltos son inusuales en que son números en lugar de cadenas:


local match = "This is an example"
local pattern = "This is an ()example"
local position = string.match(match, pattern)
print(typeof(position)) --> number