O tipo de dado corda é uma sequência de caracteres, como letras, números e símbolos. É o tipo de dado para armazenar a maioria das informações baseadas em texto.
Declarando Cadeias
Para declarar uma variável de caracteres, coloque aspas ao redor dos caracteres. É mais comum usar aspas duplas ( " ) , mas solte aspas únicas ( ' ) também. Se você quiser incluir uma aspas única ou dupla em sua string / cadeia / texto, envolva sua string ao redor do outro tipo de citação, ou use um citação escapada .
local string1 = "Hello world!"print(string1) --> Olá mundo!local string2 = 'Hello "world"!'print(string2) --> Hello "world"!
Para incluir ambas as aspas simples e duplas em uma string / cadeia / texto, ou para criar string multilinha, declare-os usando aspas duplas:
local string1 = [[Helloworld!Hello "world"!Hello 'world'!]]print(string1)--> Olá--> mundo!--> Olá "mundo"!--> Hello 'world'!
Se necessário, você pode aninhar vários brackets dentro de uma string usando o mesmo número de sinais iguais tanto no começo quanto no final do bracket:
local string1 = [=[Hello[[world!]]]=]print(string1)--> Olá--> [[world!]]
Combinação de Cadeias
Para combinar cadeias, concatená-las com dois pontos ( .. ). A concatenação de cadeias não insere espaço entre elas, então você precisará incluir espaço (s) no final/começo de uma string / cadeia / textoanterior/subsequente ou concatenar espaço entre as duas cadeias.
local hello = "Hello"local helloWithSpace = "Hello "local world = "world!"local string1 = hello .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(string1) --> Helloworld!print(string2) --> Olá mundo!print(string3) --> Hello world!
Nota que o comando print() leva múltiplos argumentos e os combina com espaços, para que você possa usar , em vez de , para produzir espaços em 2>print()2> saídas.
local hello = "Hello"local world = "world"local exclamationMark = "!"print(hello .. world .. exclamationMark) --> Helloworld!print(hello, world .. exclamationMark) --> Olá mundo!print(hello, world, exclamationMark) --> Hello world !
Conversão de Cordas
Para converter uma string em um número, use a função tonumber(). Se a string não tiver uma representação de número, tonumber() retorna nil.
local numericString = "123"print(tonumber(numericString)) --> 123local alphanumericString = "Hello123"print(tonumber(alphanumericString)) --> nil
Escapando Strings
Para escapar de uma declaração de texto de citação dupla ou única e embuter quase qualquer personagem, coloque um ponto de interrogação ( \ ) antes do personagem. Por exemplo:
- Para inserir uma citação única em uma única citação de string / cadeia / texto, use \' .
- Para inserir uma citação dupla em uma citação string / cadeia / texto, use \".
local string1 = 'Hello \'world\'!'print(string1) --> Olá 'mundo'!local string2 = "Hello \"world\"!"print(string2) --> Hello "world"!
Certos caracteres seguindo backslashes produzem personagens especiais em vez de personagens escapados:
- Para inserir uma nova linha, use \n .
- Para inserir uma aba horizontal, use \t .
local string1 = "Hello\nworld!"print(string1)--> Olá--> mundo!local string2 = "Hello\tworld!"print(string2) --> Hello world!
Interpretação de Cadeia
O Luau suporta interpretação de caracteres , uma função que permite que você insira expressões em caracteres. Use ponteiros ( ` ) para declarar uma string / cadeia / textointerpolada, então adicionar expressões dentro de aspas:
local world = "world"local string1 = `Hello {world}!`print(string1) --> Hello world!
Embora variáveis sejam o uso mais comum, você pode usar qualquer expressão, incluindo 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) --> Olá mundo, 1 vez!print(string2) --> Olá mundo, 2 vezes!print(string3) --> Hello world a third time!
Regras padrão de escape se aplicam a backticks, curly brackets e backslashes:
local string1 = `Hello \`\{world\}\`!`print(string1) --> Hello `{world}`!
Conversão de Matemática
Se você executar operações de matemática em uma string / cadeia / texto, o Luau automaticamente converte a string em um número. Se a string não tiver representação de número, ele apresenta um erro.
print("55" + 10) --> 65print("55" - 10) --> 45print("55" * 10) --> 550print("55" / 10) --> 5.5print("55" % 10) --> 5print("Hello" + 10) --> print("Hello" + 10):1: attempt to perform arithmetic (add) on string and number
Comparações
As string / cadeia / textopodem ser comparadas usando os operadores <, <=, >, 2>, 5><5>,
print("Apple" < "apple") --> verdadeiroprint("Banana" < "apple") --> verdadeiro (B está antes de um em ASCII)print("number100" < "number20") --> true
Referência de Padrão de Corda
Um padrão de caracteres é uma combinação de caracteres que você pode usar com string.match(), string.gmatch() e outras funções para encontrar uma peça, ou sub-corda, de uma string / cadeia / textomais longa.
Partidas Diretas
Você pode usar partidas diretas em uma função Luau, como string.match(), exceto para personagens mágicos. Por exemplo, esses comandos procuram a palavra Roblox dentro de uma string / cadeia / texto:
local match1 = string.match("Welcome to Roblox!", "Roblox")local match2 = string.match("Welcome to my awesome game!", "Roblox")print(match1) --> Robloxprint(match2) --> nil
Classe de Personagem
As classes de personagens são essenciais para pesquisas de texto mais avançadas. Você pode usá-las para procurar algo que não seja necessariamente específico a um personagem (classe), incluindo letras, dígitos, espaços, 2> pontuação2> e muito mais.
A tabela a seguir mostra as classes de personagens oficiais para padrões de string Luau:
Classe | Representações | Exemplo de Partida |
---|---|---|
. | Qualquer personagem | 32kasGJ1%fTlk?@94 |
%a | Uma letra maiúscula ou minúscula | aBcDeFgHiJkLmNoPqRsTuVwXyZ |
%l | Uma letra minúscula | abcdefghijklmnopqrstuvwxyz |
%u | Uma letra maiúscula | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d> | Qualquer dígito (número) | 0123456789 |
%p | Qualquer ponto de interrupção | !@#;.,. |
%w | Um personagem alfanumérico (seja uma letra ou um número) | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 |
%s | Um espaço ou personagem branco | e0> |
%c | Um personagem de controle especial controlador de personagem | |
%x | Um caracter de hexadecimal | 0123456789ABCDEF |
%z | O personagem NULL ( \0 ) |
Para personagens de letra única, como %a e %s, a correspondente letra maiúscula representa o "oposto" da classe. Por instância, %p representa um personagem de ponto de interrogação enquanto 1> %P1> representa todos os personagens, exceto ponto de interrogação.
Personagens Mágicos
Existem 12 "caracteres mágicos" que são reservados para propósitos especiais em padrões:
$ | % | ^ | * | () | ) |
. | [ ] | ] | + | - | ? |
Você pode escapar e procurar por personagens mágicos usando o símbolo %. Por exemplo, para procurar por roblox.com , escape o símbolo . (ponto) precedendo-o com um 1> %1> como em 4> % 4> .
-- “roblox.com” corresponde a “roblox#com” porque o período é interpretado como “qualquer personagem”local match1 = string.match("What is roblox#com?", "roblox.com")print(match1) --> roblox#com-- Escape do período com % para que seja interpretado como um personagem de período literallocal match2 = string.match("I love roblox.com!", "roblox%.com")print(match2) --> roblox.com
Âncoras
Você pode procurar por um padrão no começo ou no fim de uma string usando os símbolos ^ e $.
local start1 = string.match("first second third", "^first") -- Coincide porque "primeiro" está no começoprint(start1) --> primeirolocal start2 = string.match("third second first", "^first") -- Não corresponde porque "primeiro" não está no começoprint(start2) --> zerolocal end1 = string.match("first second third", "third$") -- Coincide porque "terceiro" está no terminar/parar/sairprint(end1) --> terceirolocal end2 = string.match("third second first", "third$") -- Não corresponde porque "terceiro" não está no terminar/parar/sairprint(end2) --> nil
Você também pode usar ambos ^ e $ juntos para garantir que um padrão corresponda apenas à string completa e não apenas a alguma parte dela.
-- Usando ambas ^ e $ para corresponder a uma string / cadeia / textocompletalocal match1 = string.match("Roblox", "^Roblox$") -- Coincide porque "Roblox" é a string inteira (igualdade)print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- Não corresponde porque "Roblox" não está no começo E no terminar/parar/sairprint(match2) --> zerolocal match3 = string.match("I play Roblox", "Roblox") -- Coincide porque "Roblox" está contido dentro de "I play Roblox"print(match3) --> Roblox
Modificadores de classe
Por si só, uma classe de personagem só corresponde a um personagem em uma string / cadeia / texto. Por instância, o seguinte padrão ( "%d" começa a ler a string de esquerda para direita, encontra o primeiro dígito ( "%d" ) e para para.
local match = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match) --> 2
Você pode usar modificadores com qualquer classe de personagem para controlar o resultado:
Quantificador | Meio |
---|---|
+ | Match 1 ou mais da classe de personagem anterior |
- | Combine o menor número possível de classe de personagem anterior |
* | Match 0 ou mais da classe de personagem anterior |
? | Match 1 ou menos da classe de personagem anterior |
%n | Para n entre 1 e 9, corresponde a uma substring que corresponde ao substringo capturado 1> n1>. |
%bxy | A captura balanceada correspondendo a x , y e tudo entre (por exemplo, %b() corresponde a um par de aspas e tudo entre eles) |
Adicionar um modificador ao mesmo padrão ( "%d+" em vez de "%d"), sai 25 em vez de 1> 21> :
local match1 = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match1) --> 2local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")print(match2) --> 25
Sets de classe
Definições devem ser usadas quando uma única classe de personagem não pode fazer o trabalho inteiro. Por instância, você pode querer combinar ambas as letras minúsculas ( %l ) e e pontuação de caracteres ( 0> %p0> ) usando um padrão único.
Sets são definidos por brackets [] ao redor deles. No seguinte exemplo, observe a diferença entre usar um set ( "[%l%p]+" ) e não usar um set ( "não" usando um set).
local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Definirprint(match1) --> olá!!!local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Não configuradoprint(match2) --> o!!!
O primeiro comando (configurar) diz a Luau para encontrar tanto caracteres minúsculos quanto pontuação. Com o + quantificador adicionado após o configurarinteiro, ele encontra todos desses caracteres ( ello!!! , parando quando chega ao espaço.
No segundo comando (não definido), o + quantificador só se aplica à classe %p antes dele, então Luau só agarra o primeiro personagem maiúsculo ( o ) antes da série de pontuação ( 2> !!!2> ).
Como as Classesde personagens, conjuntos podem ser "opostos" uns dos outros. Isso é feito adicionando um personagem ^ no começo do configurar, diretamente depois da abertura [. Por instância, "_[%p%s]+" representa tanto pontuação quanto espaços, enquanto
Defines também alcances que permitem encontrar uma gama inteira de partidas entre um personagem inicial e final. Esta é uma característica avançada que está descrita em mais detalhes no Manual Lua 5.1.
Capturas de Corda
String captura são sub-padrões dentro de um padrão. Estes são encerrados em paisagens () e são usados para obter (capturar) sub-cordas correspondentes e salvá-las em variáveis. Por exemplo, o seguinte padrão contém duas capturas, (%a+) e 1> percentd+1>, que retornam duas sub-cordas em um conferir
local pattern = "(%a+)%s?=%s?(%d+)"local key1, val1 = string.match("TwentyOne = 21", pattern)print(key1, val1) --> TwentyOne 21local key2, val2 = string.match("TwoThousand= 2000", pattern)print(key2, val2) --> Dois mil 2000local key3, val3 = string.match("OneMillion=1000000", pattern)print(key3, val3) --> OneMillion 1000000
No padrão anterior, o quantificador ? que segue ambas as classes %s é uma adição segura porque cria espaço em ambos os lados da placa de igualdade. Isso significa que a cor correspondente é encontrada se um (ou ambas) espaços estiverem faltando ao redor da placa de igualdade.
Capturas de string também podem ser aninhadas como o seguinte exemplo:
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--> O Reino das Nuves é divinal--> Reino da Nuvem--> O Reino da Floresta é pacífico--> Forest Kingdom
Essa pesquisa de padrão funciona da seguinte forma:
O string.gmatch() itador procura por uma correspondência em todo o padrão de "descrição" definido pela dupla de pais externos. Isso termina no primeiro comando e captura o seguindo:
# | Padrão | Capturar |
---|---|---|
1 | (O%s:%a+%sKingdom][%w%s+) | O Reino das Nuves é sagrado |
Usando sua primeira capturarde sucesso, o itador então procura uma correspondência no padrão "kingdom" definido pela dupla de pais. Este padrão aninhado simplesmente captura o seguindo:
# | Padrão | Capturar |
---|---|---|
2 ] | (%a+%sKingdom) | Reino das Nuves |
O itador então sai e continua procurando a string / cadeia / textocompleta, capturando o seguindo:
# | Padrão | Capturar |
---|---|---|
3 ] | (O%s:%a+%sKingdom][%w%s+) | O Reino Florestal é pacífico |
4 ] | (%a+%sKingdom) | Reino Florestal |
Além de tudo o acima, há um caso especial com um captura vazia ( () ). Se uma captura estiver vazia, então a posição na string será capturada:
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 42local start2, finish2 = string.match(match2, pattern)print(start2, finish2) --> 43 84
Essas capturas especiais podem ser aninhadas como as normais:
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) doprint(kingdom, position)end--> Nuvem 10--> Forest 42
Os valores retornados são incomuns, pois são números em vez de cordas:
local match = "This is an example"local pattern = "This is an ()example"local position = string.match(match, pattern)print(typeof(position)) --> number