Stringhe

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Il tipo di dati stringa è una sequenza di caratteri, come lettere, numeri e simboli.È il tipo di dati per memorizzare la maggior parte delle informazioni basate sul testo.

Dichiarare le stringhe

Per dichiarare una variabile string, metti le virgolette intorno ai caratteri.È più comune utilizzare le virgolette doppie ( " ), ma le virgolette singole ( ' ) funzionano anche.Se vuoi includere una virgoletta singola o doppia nella tua Stringa, avvolgi la tua stringa attorno all'altro tipo di virgoletta, o usa una virgoletta fuggita.


local string1 = "Hello world!"
print(string1) --> Buongiorno Mondo!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Per includere sia le virgolette singole che doppie in una Stringa, o per creare stringhe multilinee, dichiarali usando i doppi parentesi:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Ciao
--> mondo!
--> Ciao "Mondo"!
--> Hello 'world'!

Se necessario, puoi annidare più parentesi all'interno di una stringa utilizzando lo stesso numero di segni uguali sia all'inizio che alla parentesi finale:


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

Unire le stringhe

Per combinare le stringhe, concatenali con due punti ( .. ).Concatenare le stringhe non inserisce uno spazio tra di loro, quindi dovrai includere Spazio(i) alla fine/all'inizio di una Stringaprecedente/successiva o concatenare uno spazio tra le due stringhe.


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) --> Buongiorno Mondo!
print(string3) --> Hello world!

Nota che il comando print() prende più argomenti e li combina con spazi, quindi puoi usare , invece di .. per produrre spazi in print() uscite.


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Helloworld!
print(hello, world .. exclamationMark) --> Buongiorno Mondo!
print(hello, world, exclamationMark) --> Hello world !

Converti stringhe

Per convertire una stringa in un numero, usa la funzione tonumber() . Se la stringa non ha una rappresentazione numerica, tonumber() restituisce nil .


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

Esca le stringhe

Per sfuggire a una dichiarazione di stringa a doppio o singolo trattino e includere quasi qualsiasi personaggio, metti un backslash ( \ ) prima del personaggio.Ad esempio:

  • Per includere una singola citazione in una Stringadi citazione singola, usa \' .
  • Per includere una doppia citazione in una doppia citazione Stringa, usa \" .

local string1 = 'Hello \'world\'!'
print(string1) --> Ciao 'Mondo'!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

Alcuni caratteri seguiti da backslash producono caratteri speciali piuttosto che caratteri scappati:

  • Per includere una nuova linea, usa \n .
  • Per includere una scheda orizzontale, usa \t .

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

interpolazione (di stringhe)di stringa

Luau supporta l'interpolazione di stringhe , una funzione che ti consente di inserire espressioni nelle stringhe.Usa i trattini indietro ( ` ) per dichiarare una Stringainterpolata, quindi aggiungi le espressioni all'interno di parentesi curly:


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

Sebbene le variabili siano l'uso più comune, puoi usare qualsiasi espressione, inclusa la matematica:


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) --> Ciao Mondo, 1 volta!
print(string2) --> Ciao Mondo, 2 volte!
print(string3) --> Hello world a third time!

Le regole di fuga standard si applicano ai backticks, ai curly brackets e agli slash back:


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

Conversione matematica

Se esegui operazioni matematiche su una Stringa, Luau converte automaticamente la stringa in un numero.Se la stringa non ha una rappresentazione numerica, lancia un errore.


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

Confronti

Le stringhe possono essere confrontate utilizzando gli operatori <, <=, > e >= che confrontano usando l'ordine lexicografico in base ai codici ASCII di ciascun carattere in una Stringa.Ciò comporterà numeri nelle stringhe non confrontati correttamente, ad esempio, "100" sarà inferiore a "20" , poiché i bytes "0" e "1" hanno codici ASCII più bassi rispetto al byte "2" .


print("Apple" < "apple") --> vero
print("Banana" < "apple") --> true (B è prima di un in ASCII)
print("number100" < "number20") --> true

Referenza del modello di stringa

Un modello di stringa è una combinazione di caratteri che puoi usare con string.match() , string.gmatch() e altre funzioni per trovare un pezzo, o una sottostringa, di una Stringapiù lunga.

Partite dirette

Puoi usare corrispondenze dirette in una funzione Luau come string.match() , ad eccezione di caratteri magici .Ad esempio, questi comandi cercano la parola Roblox all'interno di una Stringa:


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

Classi di caratteri

Le classi di caratteri sono essenziali per ricerche di stringhe più avanzate.Puoi usarli per cercare qualcosa che non è necessariamente specifico per il personaggio ma si adatta a una categoria nota (classe), incluse lettere , numeri , spazi , punteggi e altro ancora.

La seguente tabella mostra le classi di caratteri ufficiali per i modelli di stringa Luau:

ClasseRappresentaEsempio Partita
.Qualsiasi personaggio32kasGJ1%fTlk?@94
%aUna lettera maiuscola o minuscolaaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lUna lettera minuscolaabcdefghijklmnopqrstuvwxyz
%uUna lettera maiuscolaABCDEFGHIJKLMNOPQRSTUVWXYZ
%dQualsiasi digitale (numbero)0123456789
%pQualunque carattere di punteggiatura!@#;,.
%wUn carattere alfanumerico (ad esempio una lettera o un numero)abcDEFGHIJKLMNOPQRSTUVwXyZ0123456789
%sUn carattere spazio o di spazio vuoto , \n , e \r
%cUn carattere di controllo speciale
%xUn carattere esadecimale01234
%zIl personaggio NULL ( \0 )

Per le classi di caratteri a lettera singola come %a e %s, la corrispondente lettera maiuscola rappresenta l'"opposto" della classe.Ad esempio, %p rappresenta un carattere di punteggiatura mentre %P rappresenta tutti i caratteri tranne il punteggiatura.

Personaggi magici

Ci sono 12 "personaggi magici" che sono riservati per scopi speciali nei modelli:

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

Puoi scappare e cercare personaggi magici usando il simbolo %.Ad esempio, per cercare roblox.com , scappa dal simbolo . (periodo) precedendolo con un % come in %. .


-- il match "roblox.com" corrisponde a "roblox#com" perché il periodo viene interpretato come "qualsiasi personaggio"
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Scappa dal periodo con % in modo che venga interpretato come un carattere periodo letterale
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Ancoraggi

Puoi cercare un modello all'inizio o alla fine di una stringa utilizzando i simboli ^ e $.


local start1 = string.match("first second third", "^first") -- Corrisponde perché "primo" è all'inizio
print(start1) --> prima
local start2 = string.match("third second first", "^first") -- Non corrisponde perché "primo" non è all'inizio
print(start2) --> zero
local end1 = string.match("first second third", "third$") -- Corrisponde perché "terzo" è alla Terminare
print(end1) --> terzo
local end2 = string.match("third second first", "third$") -- Non corrisponde perché "terzo" non è alla Terminare
print(end2) --> nil

Puoi anche utilizzare entrambi ^ e $ insieme per garantire che un modello corrisponda solo alla stringa completa e non solo a una parte di essa.


-- Utilizzare sia ^ che $ per corrispondere su una Stringacompleta
local match1 = string.match("Roblox", "^Roblox$") -- Corrisponde perché "Roblox" è l'intera stringa (uguaglianza)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Non corrisponde perché "Roblox" non è all'inizio E alla Terminare
print(match2) --> zero
local match3 = string.match("I play Roblox", "Roblox") -- Corrisponde perché "Roblox" è contenuto in "Gioco Roblox"
print(match3) --> Roblox

Modificatori di classe

Di per sé, una classe di caratteri corrisponde solo a uno carattere in una Stringa.Ad esempio, il seguente modello ( "%d" ) inizia a leggere la stringa da sinistra a destra, trova il primo digitale ( 2 ), e si ferma.


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

Puoi usare modificatori con qualsiasi classe di caratteri per controllare il Risultato:

QuantificatoreSignificato
+Corrispondi a 1 o più della classe di caratteri precedente
-Corrispondi a poche classi di caratteri precedenti il più possibile
*Corrispondi a 0 o più della classe di caratteri precedente
?Corrispondi a 1 o meno della classe di caratteri precedente
%nPer n tra 1 e 9, corrisponde a una sottostringa uguale alla n Stringacatturata.
%bxyLa cattura bilanciata corrisponde a x , y , e tutto ciò che è tra (ad esempio, %b() corrisponde a una coppia di parentesi e tutto ciò che è tra di loro)

Aggiungere un modificatore allo stesso modello ( "%d+" invece di "%d" ), produce 25 invece di 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

Set di classi

Set devono essere utilizzati quando una singola classe di caratteri non può svolgere l'intero lavoro.Ad esempio, potresti voler abbinare entrambe le lettere minuscole ( %l ) e i caratteri di punteggiatura ( %p ) utilizzando un singolo modello.

Gli insiemi sono definiti da parentesi [] intorno ad essi.Nell'esempio seguente, nota la differenza tra l'utilizzo di un set ( "[%l%p]+" ) e non utilizzando un set ( "%l%p+" ).


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Impostare
print(match1) --> ello!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Non impostato
print(match2) --> o!!!

Il primo comando (Impostare) dice a Luau di trovare sia i caratteri minuscoli che la punteggiatura.Con il quantificatore + aggiunto dopo l'intero Impostare, trova tutti di quei caratteri ( ello!!! ), fermandosi quando raggiunge lo Spazio.

Nel secondo comando (non impostato), il quantificatore + si applica solo alla classe %p prima di esso, quindi Luau cattura solo il primo carattere minuscolo ( o ) prima della serie di punteggi ( !!! ).

Come le Classidi personaggio, i set possono essere "opposti" di se stessi.Questo viene fatto aggiungendo un carattere ^ alla fine del Impostare, subito dopo l'apertura [.Ad esempio, "[%p%s]+" rappresenta sia la punteggiatura che gli spazi, mentre "[^%p%s]+" rappresenta tutti i caratteri tranne la punteggiatura e gli spazi.

Anche i set supportano intervalli che ti consentono di trovare un'intera gamma di corrispondenze tra un carattere iniziale e finale.Questa è una funzione avanzata che viene descritta in più dettaglio nel Manuale Lua 5.1.

Catture di stringhe

Le stringhe cattura sono sottopattern all'interno di un modello.Sono racchiusi tra parentesi () e vengono utilizzati per ottenere (cattura testo) corrispondenze di sottostringhe e salvarle nelle variabili.Ad esempio, il seguente modello contiene due catture, (%a+) e (%d+) , che restituiscono due substring dopo una Corrisponderiuscita.


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

Nel modello precedente, il quantificatore ? che segue entrambe le classi %s è un'aggiunta sicura perché rende lo spazio su entrambi i lati del segno = opzionale.Questo significa che la partita ha successo se uno (o entrambi) gli spazi mancano intorno al segno uguale.

Le catture di stringa possono anche essere nidificate come l'esempio seguente:


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
--> Il Regno del Cloud è paradisiaco
--> Regno del cloud
--> Il Regno della Foresta è pacifico
--> Forest Kingdom

Questa ricerca del modello funziona come segue:

L'iteratore string.gmatch() cerca una corrispondenza su tutto il modello "Descrizione" definito dall'esterno dei parentesi.Questo si ferma al primo comma e cattura quanto Seguendo:

#ModelloCattura
1(The%s(%a+%sKingdom)[%w%s]+)Il Regno del Cloud è paradisiaco

Usando la sua prima cattura testodi successo, l'iteratore quindi cerca una corrispondenza sul modello "kingdom" definito dal paio interno di parentesi.Questo modello nidato cattura semplicemente quanto Seguendo:

#ModelloCattura
2(%a+%sKingdom)Regno del cloud

L'iteratore poi si ritira e continua a cercare l'intera Stringa, catturando quanto Seguendo:

#ModelloCattura
3(The%s(%a+%sKingdom)[%w%s]+)Il Regno della Foresta è pacifico
4(%a+%sKingdom)Regno della foresta

Oltre a tutto quanto sopra, c'è un caso speciale con una cattura vuota ( () ).Se una cattura è vuota, allora la posizione nella stringa verrà catturata:


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

Queste catture speciali possono essere annidate come le normali:


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
--> Cloud 10
--> Forest 42

I valori restituiti sono insoliti in quanto sono numberi piuttosto che stringhe:


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