Cordas

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

O tipo de dado string é 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.

Declare strings

Para declarar uma variável de corda, coloque aspas ao redor dos caracteres.É mais comum usar aspas duplas ( " ), mas aspas únicas ( ' ) também funcionam.Se você quiser incluir uma citação única ou dupla em sua string / cadeia / texto, envolva sua string ao redor do outro tipo de citação ou use uma citação escapada.


local string1 = "Hello world!"
print(string1) --> Olá mundo!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Para incluir citações únicas e duplas em uma string / cadeia / textoou criar strings de várias linhas, declare-as usando parênteses duplos:


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

Se necessário, você pode aninhar vários parênteses dentro de uma string usando o mesmo número de sinais iguais tanto no parêntese inicial quanto no final:


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

Combinar strings

Para combinar cordas, concatar elas com dois pontos ( .. ).Concatenar strings não insere um espaço entre elas, então você precisará incluir espaço(s) no final/no início de uma string / cadeia / textoanterior/subsequente ou concatenar um espaço entre as duas strings.


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) --> Olá mundo!
print(string3) --> Hello world!

Observe que o comando print() toma vários argumentos e os combina com espaços, para que você possa usar , em vez de .. para obter espaços em print() 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 !

Converter strings

Para converter uma string em um número, use a função tonumber() . Se a string não tiver representação de número, tonumber() retorna nil .


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

Escapando strings

Para escapar uma declaração de string de citação dupla ou única e incluir quase qualquer personagem, coloque um retorno de vídeo ( \ ) antes do personagem.Por exemplo:

  • Para incluir uma citação única em uma string / cadeia / textode citação única, use \' .
  • Para incluir uma citação dupla em uma string / cadeia / textode citação dupla, use \" .

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

Certos caracteres após retornos de vírgula produzem caracteres especiais em vez de caracteres escapados:

  • Para incluir uma nova linha, use \n .
  • Para incluir uma aba horizontal, use \t.

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

interpolaçãode corda

O Luau suporta interpolação de strings , um recurso que permite que você insira expressões em strings.Use reticências ( ` ) para declarar uma string / cadeia / textointerpolada, então adicione expressões dentro de parênteses curvos:


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 = 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) --> Olá mundo, 1 vez!
print(string2) --> Olá mundo, 2 vezes!
print(string3) --> Hello world a third time!

Regras de escape padrão se aplicam a reticências, parênteses curvos e retornos:


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

Conversão de matemática

Se você executar operações matemáticas em uma string / cadeia / texto, o Luau converte automaticamente a string em um número.Se a string não tiver representação de número, ela lança um erro.


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

Comparações

Cordas podem ser comparadas usando os operadores <, <=, > e >=, que comparam usando a ordem lexical, com base nos códigos ASCII de cada personagem em uma string / cadeia / texto.Isso resultará em números em strings não sendo comparados corretamente, por exemplo, "100" será menor que "20" , pois os bytes "0" e "1" têm códigos ASCII menores do que o byte "2" .


print("Apple" < "apple") --> verdadeiro
print("Banana" < "apple") --> verdadeiro (B está antes de um em ASCII)
print("number100" < "number20") --> true

Referência de padrão de string

Um padrão de corda é uma combinação de caracteres que você pode usar com string.match() , string.gmatch() e outras funções para encontrar uma peça, ou substring, de uma string / cadeia / textomais longa.

Partidas diretas

Você pode usar correspondências diretas em uma função Luau como string.match(), exceto caracteres mágicos.Por exemplo, esses comandos buscam 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) --> Roblox
print(match2) --> nil

Classes de personagem

As classes de personagens são essenciais para pesquisas de corda mais avançadas.Você pode usá-los para procurar por algo que não seja necessariamente específico de personagens, mas que se encaixa dentro de uma categoria conhecida (classe), incluindo letras , dígitos , espaços , pontuação e muito mais.

A tabela a seguir mostra as classes de personagens oficiais para padrões de corda Luau:

ClasseRepresentaExemplo de Partida
.Qualquer personagem32kasGJ1%fTlk?@94
%aUma letra maiúscula ou minúsculaaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lUma letra minúsculaabcdefghijklmnopqrstuvwxyz
%uUma letra maiúsculaABCDEFGHIJKLMNOPQRSTUVWXYZ
%dQualquer dígito (numbero)0123456789
%pQualquer personagem de pontuação!@#;,.
%wUm personagem alfanumérico (uma letra ou um número)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sUm espaço ou um caractere de espaço em branco , \n , e \r
%cUm personagem de controle especial
%xUm personagem hexadecimal0123456789 ABCDEF
%zO personagem NULL ( \0 )

Para classes de caracteres de uma letra, como %a e %s, a letra maiúscula correspondente representa o "oposto" da classe.Por instância, %p representa um caractere de pontuação enquanto %P representa todos os caracteres, exceto pontuação.

Personagens mágicos

Existem 12 "personagens 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 % como em %. .


-- as correspondências "roblox.com" e "roblox#com" são interpretadas como "qualquer personagem"
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Escape o período com % para que seja interpretado como um personagem de período literal
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Âncoras

Você pode procurar por um padrão no início ou no final de uma string usando os símbolos ^ e $.


local start1 = string.match("first second third", "^first") -- Coincidências porque "primeiro" está no começo
print(start1) --> primeiro
local start2 = string.match("third second first", "^first") -- Não corresponde porque "primeiro" não está no começo
print(start2) --> nil
local end1 = string.match("first second third", "third$") -- Coincidências porque "terceiro" está no terminar/parar/sair
print(end1) --> terceiro
local end2 = string.match("third second first", "third$") -- Não corresponde porque "terceiro" não está no terminar/parar/sair
print(end2) --> nil

Você também pode usar tanto ^ e $ juntos para garantir que um padrão corresponda apenas à string completa e não apenas a alguma parte dela.


-- Usando tanto ^ e $ para correspondência em uma string / cadeia / textocompleta
local match1 = string.match("Roblox", "^Roblox$") -- Coincide porque "Roblox" é toda a string (igualdade)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Não corresponde porque "Roblox" não está no começo E no terminar/parar/sair
print(match2) --> nil
local match3 = string.match("I play Roblox", "Roblox") -- Coincidências porque "Roblox" está contido dentro de "Eu jogo Roblox"
print(match3) --> Roblox

Modificadores de classe

Por si só, uma classe de personagem só corresponde a um caractere 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 ( 2 ), e 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:

QuantificadorSignificado
+Correspondente a 1 ou mais da classe de personagem anterior
-Combine com o mínimo possível da classe de personagem anterior
*Coincide com 0 ou mais da classe de personagem anterior
?Coincide com 1 ou menos da classe de personagem anterior
%nPara n entre 1 e 9, combina uma substring igual à n da string / cadeia / textocapturada.
%bxyA captura equilibrada que corresponde a x, y e tudo entre (por exemplo, %b() corresponde a um par de parênteses e tudo entre eles)

Adicionar um modificador ao mesmo padrão ( "%d+" em vez de "%d" ), produz 25 em vez 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

Definições de classe

Conjuntos devem ser usados quando uma única classe de personagem não pode fazer todo o trabalho.Por instância, você pode querer combinar ambas as letras minúsculas ( %l ) e caracteres de pontuação ( %p ) usando um único padrão.

Conjuntos são definidos por parênteses [] ao redor deles.No seguinte exemplo, note a diferença entre usar um conjunto ( "[%l%p]+" ) e não usar um conjunto ( "%l%p+" ).


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Estabelecer
print(match1) --> ello!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Não configurado
print(match2) --> o!!!

O primeiro comando (configurar) diz ao Luau para encontrar tanto caracteres minúsculos quanto pontuação.Com o quantificador + adicionado após todo o configurar, ele encontra todos desses personagens (ello!!!), parando quando chega ao espaço.

No segundo comando (não definido), o quantificador + aplica-se apenas à classe %p antes dele, então o Luau pega apenas o primeiro caractere minúsculo ( o ) antes da série de pontuação ( !!! ).

Como as Classesde personagens, os conjuntos podem ser "opostos" uns dos outros.Isso é feito adicionando um caractere ^ na primeira parte do configurar, logo após a abertura [.Por instância, "[%p%s]+" representa tanto pontuação e espaços, enquanto "[^%p%s]+" representa todos os caracteres exceto pontuação e espaços.

Conjuntos também suportam intervalos que permitem encontrar toda uma gama de correspondências entre um personagem inicial e final.Esta é uma funcionalidade avançada que é descrita com mais detalhe no Manual do Lua 5.1.

Capturas de corda

As capturas de corda são subpadrões dentro de um padrão .Estes são encerrados em parênteses () e são usados para obter (capturar) sub sequências correspondentes e salvá-las em variáveis.Por exemplo, o seguinte padrão contém duas capturas, (%a+) e (%d+) , que retornam duas sub strings após uma conferirbem-sucedida.


local pattern = "(%a+)%s?=%s?(%d+)"
local key1, val1 = string.match("TwentyOne = 21", pattern)
print(key1, val1) --> Vinte e uma 21
local key2, val2 = string.match("TwoThousand= 2000", pattern)
print(key2, val2) --> Dois Mil 2000
local 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 torna o espaço ao lado do sinal = opcional.Isso significa que a partida será bem-sucedida se um (ou ambos) espaços estiverem faltando ao redor do sinal igual.

As capturas de corda também podem ser nestas 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) do
print(description)
print(kingdom)
end
--> O Reino da Nuvem é celestial
--> Reino da Nuvem
--> O Reino da Floresta é pacífico
--> Forest Kingdom

Essa busca de padrões funciona da seguinte forma:

O string.gmatch() iteraador procura uma correspondência em todo o padrão "descrição" definido pelo par externo de parênteses.Isso termina no primeiro vídeo e captura o seguindo:

#PadrãoCapturar
1(The%s(%a+%sKingdom)[%w%s]+)O Reino da Nuvem é celestial

Usando sua primeira capturarbem-sucedida, o iterador então procura uma correspondência no padrão "reino" definido pelo par interno de parênteses.Este padrão aninhado simplesmente captura o seguindo:

#PadrãoCapturar
2(%a+%sReino)Reino da Nuvem

O itereador então recua e continua a procurar a string / cadeia / textocompleta, capturando o seguindo:

#PadrãoCapturar
3(The%s(%a+%sKingdom)[%w%s]+)O Reino da Floresta é pacífico
4(%a+%sReino)Reino da Floresta

Além de tudo o que foi mencionado acima, há um caso especial com uma 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 42
local 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) do
print(kingdom, position)
end
--> Nuvem 10
--> Forest 42

Os valores retornados são incomuns, pois são números em vez de strings:


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