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 di stringa, metti i caratteri intorno ai personaggi. È più comune utilizzare i doppi caratteri ( " ) ma i singoli caratteri ( ' ) funzionano anche. Se vuoi includere un singolo o doppio carattere nella tua Stringa, avvolgi la tua stringa intorno al tipo di citazione, o usa un Escaped Quote .
local string1 = "Hello world!"print(string1) --> Ciao Mondo!local string2 = 'Hello "world"!'print(string2) --> Hello "world"!
Per includere sia le singole che le doppie virgole in una Stringa, o per creare stringhe multi-linea, dichiarali usando i doppi caratteri:
local string1 = [[Helloworld!Hello "world"!Hello 'world'!]]print(string1)--> Ciao--> mondo!--> Ciao "Mondo"!--> Hello 'world'!
Se necessario, puoi annidare più bracket all'interno di una stringa utilizzando lo stesso numero di segni pari in both beginning e ending bracket:
local string1 = [=[Hello[[world!]]]=]print(string1)--> Ciao--> [[world!]]
Combina corde
Per combinare le stringhe, concatenate con due punti ( .. ). Concatenando le stringhe non inserisce uno spazio tra di loro, quindi dovrai includere uno Spazio(s) alla fine/inizio di una precedente/successiva Stringa, o concatenare uno spazio tra le due stringhe.
local hello = "Hello"local helloWithSpace = "Hello "local world = "world!"local string1 = hello .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(string1) --> Helloworld!print(string2) --> Ciao Mondo!print(string3) --> Hello world!
Nota che il comando print() prende più argomenti e li combina con spazi in modo che tu possa usare , invece di 2> ..2> per generare spazi in 5> print()5> output.
local hello = "Hello"local world = "world"local exclamationMark = "!"print(hello .. world .. exclamationMark) --> Helloworld!print(hello, world .. exclamationMark) --> Ciao Mondo!print(hello, world, exclamationMark) --> Hello world !
Conversione di stringhe
Per convertire una stringa in un numero, usa la funzione tonumber(). Se la stringa non ha una rappresentazione del numero, tonumber() restituisce nil .
local numericString = "123"print(tonumber(numericString)) --> 123local alphanumericString = "Hello123"print(tonumber(alphanumericString)) --> nil
Evadere le stringhe
Per sfuggire a una dichiarazione di stringa a doppio o singolo carattere e includere quasi qualsiasi carattere, metti un backslash ( \ ) prima del carattere. Ad esempio:
- Per incollare un singolo pensiero in una singola Stringa, usa \' .
- Per incollare una doppia virgola in una Stringadoppia virgola, usa \" .
local string1 = 'Hello \'world\'!'print(string1) --> Ciao 'Mondo'!local string2 = "Hello \"world\"!"print(string2) --> Hello "world"!
Alcuni personaggi seguono gli slashback producendo personaggi speciali invece che personaggi fuggiti:
- Per includere una nuova linea, usa \n .
- Per inserire una scheda orizzontale, usa \t .
local string1 = "Hello\nworld!"print(string1)--> Ciao--> mondo!local string2 = "Hello\tworld!"print(string2) --> Hello world!
Interpretazione di stringa
Luau supporta interpretazione delle stringhe , una funzione che ti consente di inserire le espressioni nelle stringhe. Usa i caratteri di rientro ( ` ) per dichiarare una Stringainterpolata, quindi aggiungi le espressioni all'interno dei caratteri di rientro:
local world = "world"local string1 = `Hello {world}!`print(string1) --> Hello world!
Anche se le variabili sono l'uso più comune, puoi usare qualsiasi espressione, inclusa la matematica:
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) --> Ciao Mondo, 1 volta!print(string2) --> Ciao Mondo, 2 volte!print(string3) --> Hello world a third time!
Le regole di escape standard si applicano per i backticks, i cunei curvi e le backslashes:
local string1 = `Hello \`\{world\}\`!`print(string1) --> Hello `{world}`!
Conversione matematica
Se esegui operazioni di matematica su una Stringa, Luau convertisce automaticamente la stringa in un numero. Se la stringa non ha una rappresentazione del numero, mostra un errore.
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
Confronto
Le Stringapossono essere paragonate utilizzando il < , il <= , il > e il 2> >=</
print("Apple" < "apple") --> veroprint("Banana" < "apple") --> vero (B è prima di un in ASCII)print("number100" < "number20") --> true
Riferimento del modello di stringa
Un modello di stringa è una combinazione di caratteri che puoi utilizzare con string.match(), string.gmatch() e altre funzioni per trovare una parte, o substring, di una lunga Stringa.
Partite Dirette
Puoi usare match diretti in una funzione Luau come string.match() , ad eccezione di personaggi 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) --> Robloxprint(match2) --> nil
Classi Personaggio
Le classi dei personaggi sono essenziali per più avanzate ricerche di stringa. Puoi usarli per cercare qualcosa che non è necessariamente classe specifico ma si adatta in una categoria conosciuta (classe), tra cui lettere , cifre , spazi , 2> punteggio2> e altro ancora.
La seguente tabella mostra le classi di personaggio ufficiali per i modelli di stringa Luau:
Per le classi di personaggio di singolo carattere, come %a e %s, la lettera maiuscola corrispondente rappresenta il "反対" della classe. Ad esempio, %p rappresenta un carattere di punteggio mentre 1> %P1> rappresenta tutti i caratteri tranne il punteggio.
Personaggi magici
Ci sono 12 "caratteri magici" che sono riservati per scopi speciali in modelli:
$ | % | ^ | * | ( | ) ] |
. | [ ] | ] | + | - | ? |
Puoi scappare e cercare i personaggi magici usando il simbolo %. Ad esempio, per cercare roblox.com , scappa il simbolo . (per il periodo) precedendo con un 1> %1> come in 4> %4> .
-- roblox.com corrisponde a "roblox#com" poiché 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 personaggio letterale del periodolocal 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'inizioprint(start1) --> primalocal start2 = string.match("third second first", "^first") -- Non corrisponde perché "primo" non è all'inizioprint(start2) --> nullalocal end1 = string.match("first second third", "third$") -- Corrisponde perché "terzo" è alla Terminareprint(end1) --> terzolocal end2 = string.match("third second first", "third$") -- Non corrisponde perché "terzo" non è alla Terminareprint(end2) --> nil
Puoi anche usare entrambi ^ e $ insieme per assicurarti che un modello corrisponda solo alla stringa completa e non a una parte di essa.
-- Usa sia ^ che $ per corrispondere in una Stringacompletalocal match1 = string.match("Roblox", "^Roblox$") -- Corrisponde perché "Roblox" è l'intera stringa (uguaglianza)print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- Non corrisponde perché "Roblox" non è all'inizio E alla Terminareprint(match2) --> nullalocal match3 = string.match("I play Roblox", "Roblox") -- Corrisponde perché "Roblox" è contenuto all'interno di "I play Roblox"print(match3) --> Roblox
Modificatori di classe
Da solo, una classe di personaggio corrisponde a un solo personaggio in una Stringa. Ad esempio, il seguente modello ( "%d" ) inizia a leggere la stringa da sinistra a destra, trova il primo digit ( 1> 21> ) 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 personaggio per controllare il Risultato:
Quantificatore | Significato |
---|---|
+ | Corrispondi 1 o più della classe di personaggio precedente |
- | Corrispondi il maggior numero possibile di caratteri precedenti |
* | Corrispondi 0 o più della classe di personaggio precedente |
? | Corrispondi 1 o meno della classe di personaggio precedente |
%n | Per n tra 1 e 9, corrisponde a una substring uguale alla 1> n1> th corda Stringa. |
%bxy) | La cattura equilibrata corrispondente a x , y , e tutto tra (per esempio, %b() corrisponde a un paio di parentesi e tutto tra di loro) |
L'aggiunta di un modificatore allo stesso modello ( "%d+" invece di "%d" ) produce 25 invece di 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
Set di classe
Le impostazioni dovrebbero essere utilizzate quando una singola classe di caratteri non può fare l'intero lavoro. Ad esempio, potresti voler corrispondere entrambe le lettere minuscole ( %l ) e e punti di interruzione dei caratteri ( 0> %p0> ) utilizzando un modello di base.
I set sono definiti dai brackets [] intorno a loro. Nel seguente esempio, nota la differenza tra l'uso di un set ( "[%l%p]+" ) e l'uso di un set ( non usando un set ( 1> "%l%p+").
local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Impostareprint(match1) --> ciao!!!local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Non impostatoprint(match2) --> o!!!
Il primo comando (Impostare) dice a Luau di trovare sia i caratteri minuscoli che i punti di interruzione. Con il + quantificatore aggiunto dopo l'intero Impostare, trova tutti questi caratteri ( ello!!! ) quando raggiunge lo Spazio.
Nel secondo comando (non impostato), il + quantificatore si applica solo alla classe %p prima di lui, quindi Luau prende solo il primo carattere minuscolo ( o ) prima della serie di punteggiatura ( 2> !!!2> ).
Come le Classidei personaggi, le set possono essere "opposti" di loro stessi. Questo viene fatto aggiungendo un ^ personaggio all'inizio della Impostare, direttamente dopo l'apertura [ . Ad esempio, "[%p%s]+" rappresenta sia la punteggiatura che gli spazi,
Supporta anche 範圍 che ti consente di trovare un intero range di match tra un personaggio di partenza e un personaggio di destinazione. Questa è una funzione avanzata che è descritta in più dettagli nel Manuale Lua 5.1 .
Cattura di stringhe
Le stringhe catturano sono sottopatroni all'interno di un modello. Questi sono chiusi in parentesi () e vengono utilizzati per ottenere (cattura testo) substring corrispondenti e salvarli alle variabili. Ad esempio, il seguente modello contiene due substring corrispondenti, (%a+) e 1> percentd+1>, che restitu
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) --> DueMille 2000local key3, val3 = string.match("OneMillion=1000000", pattern)print(key3, val3) --> OneMillion 1000000
Nel precedente modello, il ? quantificatore che segue entrambe le classi %s è un'aggiunta sicura poiché rende lo spazio su entrambi i lati del segno = opzionale. Ciò significa che la corrispondenza avrà successo se uno (o entrambi) gli spazi sono mancanti intorno al segno pari.
Le catture di stringa possono anche essere nestate come segue esempio:
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--> Il Cloud Kingdom è paradisiaco--> Regno del Cloud--> Il regno della foresta è pacifico--> Forest Kingdom
Questa ricerca del modello funziona come segue:
Il string.gmatch() innovatore cerca un match su tutto il modello di Descrizionedefinito dall'esterno paio di parentesi. Questo si ferma al primo commando e cattura il Seguendo:
# | Pattern | Cattura |
---|---|---|
1 ] | (Il regno%) [%w%s+] | Il Cloud Kingdom è paradisiaco |
Usando la sua prima cattura testodi successo, l'iteratore poi cerca una corrispondenza sul modello "kingdom" definito dalla coppia di parentesi interne. Questo modello in doppio livello semplicemente cattura il Seguendo:
# | Pattern | Cattura |
---|---|---|
2 | :%a+%sKingdom) | Il regno dei cloud |
L'iteratore poi si ritira e continua a cercare la Stringacompleta, catturando il Seguendo:
# | Pattern | Cattura |
---|---|---|
3 | (Il regno%) [%w%s+] | Il regno della foresta è pacifico |
4 | :%a+%sKingdom) | Regno della Foresta |
Oltre a tutto ciò, c'è un caso speciale con una cattura vuota ( () ). Se una cattura è vuota, allora la posizione nella stringa sarà 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 42local start2, finish2 = string.match(match2, pattern)print(start2, finish2) --> 43 84
Queste catture speciali possono essere annidate come quelle 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) doprint(kingdom, position)end--> Cloud 10--> Forest 42
I valori restituiti sono insoliti in quanto sono numberi invece che stringhe:
local match = "This is an example"local pattern = "This is an ()example"local position = string.match(match, pattern)print(typeof(position)) --> number