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 = [[Helloworld!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 .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(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)) -->123local 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 = 1local 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 65print("55" - 10) --más de 45print("55" * 10) --más de 550print("55" / 10) --> 5,5print("55" % 10) --> 5 añosprint("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) --> Robloxprint(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:
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 literallocal 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 principioprint(start1) --> primerolocal start2 = string.match("third second first", "^first") -- No coincide porque "primero" no está al principioprint(start2) --> cerolocal end1 = string.match("first second third", "third$") -- Partidos porque el "tercer" está al finalizarprint(end1) --> tercerolocal end2 = string.match("third second first", "third$") -- No coincide porque "tercer" no está al finalizarprint(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 completalocal match1 = string.match("Roblox", "^Roblox$") -- Coincide porque "Roblox" es la cadena completa (igualdad)print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- No coincide porque "Roblox" no está al principio Y al finalizarprint(match2) --> cerolocal 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:
Quantificador | Significado |
---|---|
+ | 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 |
%n | Para n entre 1 y 9 , coincide con un substring igual a la cadena capturada n. |
%bxy | La 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ñoslocal 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]+") -- Establecerprint(match1) --> ¡¡¡eso!!!local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- No establecidoprint(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 21local key2, val2 = string.match("TwoThousand= 2000", pattern)print(key2, val2) --> Dos Mil 2000local 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) doprint(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ón | Captura |
---|---|---|
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ón | Captura |
---|---|---|
2 | (%a+%sReino) | Reino de la Nube |
El iterador luego sale y continúa buscando la cadena completa, capturando lo siguiendo:
# | Patrón | Captura |
---|---|---|
3 | (El%s(%a+%sReino)[%w%s]+) | El Reino del Bosque es pacífico |
4 | (%a+%sReino) | Reino Forestal |