Die Zeichen- -Datenart ist eine Reihe von Zeichen, wie Buchstaben, Zahlen und Symbole. Es ist die Datentyp- für die Speicherung der meisten textbasierten Informationen.
Strings deklarieren
Um eine Variable zu erklären, setzen Sie Klammern um die Zeichen. Es ist häufiger, doppelte Klammern zu verwenden ( >)), aber einzelne Klammern ( >) funktionieren auch. Wenn Sie eine einzelne oder doppelte Zitat in Ihrer Stringenthalten möchten, um ein einzelnes oder doppelte Zitat in Ihrer Zeile zu verwenden, um ein entkommenes Zitat zu verwenden.
local string1 = "Hello world!"print(string1) --> Hallo, Welt!local string2 = 'Hello "world"!'print(string2) --> Hello "world"!
Um sowohl einzelne als auch doppelte Anführungszeichen in einer Stringzu enthalten, oder um mehrere Zeilen zu erstellen, deklarieren Sie sie mit doppelten Klammern:
local string1 = [[Helloworld!Hello "world"!Hello 'world'!]]print(string1)--> Hallo--> welt!--> Hallo "Welt"!--> Hello 'world'!
Wenn nötig, können Sie mehrere Klammern in einer Zeile mit der gleichen Anzahl von gleichzeichen am Anfang und am Ende der Klammer einführen:
local string1 = [=[Hello[[world!]]]=]print(string1)--> Hallo--> [[world!]]
Strings kombinieren
Um Strings zu kombinieren, concatenate sie mit zwei Punkten ( .. ). Das Concatenieren von Strings fügt keinen Leerzeichen zwischen ihnen ein, so dass Sie am Ende/Anfang eines vorherigen/folgenden Strings einen Platzeinfügen müssen oder das Concatenieren eines Leerzeichens zwischen den beiden Strings erforderlich ist.
local hello = "Hello"local helloWithSpace = "Hello "local world = "world!"local string1 = hello .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(string1) --> Hellowelt!print(string2) --> Hallo, Welt!print(string3) --> Hello world!
Beachten Sie, dass die Befehlszeile print() mehrere Argumente erfordert und sie mit mit Leerstellen kombiniert, sodass Sie , anstelle von 1> ..1> in 4> print()4> Ausgaben Blöcke erzeugen können.
local hello = "Hello"local world = "world"local exclamationMark = "!"print(hello .. world .. exclamationMark) --> Hellowelt!print(hello, world .. exclamationMark) --> Hallo, Welt!print(hello, world, exclamationMark) --> Hello world !
Umwandlung von Strings
Um eine Zeichenfolge in eine Zahl umzuwandeln, verwenden Sie die Funktion tonumber(). Wenn die Zeichenfolge keine Zahl darstellt, gibt Global.LuaGlobals.tonumber()``nil zurück.
local numericString = "123"print(tonumber(numericString)) --> 123local alphanumericString = "Hello123"print(tonumber(alphanumericString)) --> nil
Schnurren entkommen
Um eine doppelte oder einzelne Zeichenerklärung zu entkommen und fast jeden Charakter einzufügen, setzen Sie einen Rückwärtsschräg ( \ ) vor dem Charakter. Zum Beispiel:
- Um ein einzelnes Zitat in einer einzelnen Stringeinzufügen, verwende \' .
- Um einen doppelten Quot in einer doppelten Quoten-String einzufügen, verwende \" .
local string1 = 'Hello \'world\'!'print(string1) --> Hallo, 'Welt'!local string2 = "Hello \"world\"!"print(string2) --> Hello "world"!
Bestimmte Zeichen, die Rückwärtsstriche folgen, produzieren spezielle Zeichen, nicht entkommene Zeichen:
- Um eine neue Zeile einzufügen, verwende \n .
- Um eine horizontale Registerkarte einzufügen, verwenden Sie \t .
local string1 = "Hello\nworld!"print(string1)--> Hallo--> welt!local string2 = "Hello\tworld!"print(string2) --> Hello world!
String-Übersetzung
Luau unterstützt String-Interpolation , eine Funktion, die es Ihnen ermöglicht, Ausdrücke in Strings einzufügen. Verwenden Sie Rückticks ( ` ) zu deklarieren eine interpolierte Zeichenfolge und dann Elemente innerhalb von Klammern hinzufügen:
local world = "world"local string1 = `Hello {world}!`print(string1) --> Hello world!
Obwohl Variablen die häufigste Verwendung sind, können Sie jede Ausdruck verwenden, einschließlich Mathe:
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) --> Hallo, Welt, 1 Mal!print(string2) --> Hallo, Welt, 2 Mal!print(string3) --> Hello world a third time!
Standard-Entfernungsregeln gelten für Rückticks, Lockenbügel und Rückschräge:
local string1 = `Hello \`\{world\}\`!`print(string1) --> Hello `{world}`!
Mathematische Umwandlung
Wenn Sie auf einer StringMathe-Operationen ausführen, übernimmt Luau die Matte automatisch in eine Zahl um. Wenn die Zeile keine Zahldarstellung hat, gibt es einen Fehler an.
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
Vergleiche
Schnursen können mit den < , <= , > und 2> Operatoren verglichen werden, die basierend
print("Apple" < "apple") --> wahrprint("Banana" < "apple") --> true (B ist vor a in ASCII)print("number100" < "number20") --> true
Referenz auf Strings-Muster
Ein Strichmuster ist eine Kombination von Zeichen, die Sie mit string.match(), string.gmatch() und anderen Funktionen verwenden, um ein Stück oder eine Unterstrung eines längeren Strings zu finden.
Direkte Matches
Du kannst direkte Matches in einer Luau-Funktion wie string.match() , außer für magische Zeichen . Zum Beispiel suchen diese Befehle nach dem Wort Roblox innerhalb einer String:
local match1 = string.match("Welcome to Roblox!", "Roblox")local match2 = string.match("Welcome to my awesome game!", "Roblox")print(match1) --> Robloxprint(match2) --> nil
Charakter-Klassen
Charakter-Klassen sind für erweiterte Zeichensuche unerlässlich. Sie können sie verwenden, um nach etwas zu suchen, das nicht unbedingt Charakter-spezifisch ist, aber in einer bekannten Kategorie (Klasse) passt, einschließlich Buchstaben , Zahlen , Leerstellen , 2> Interpunktion2> und mehr.
Die folgende Tabelle zeigt die offiziellen Charakterklassen für Luau-String-Muster:
Klasse | Vertreten | Beispiel-Match |
---|---|---|
. | Jeder Charakter | 32kasGJ1%fTlk?@94 |
%a | Ein Groß- oder Kleinschreiben | aBcDeFgHiJkLmNoPqRsTuVwXyZ |
%l | Ein unter Großbuchstaben geschriebenes Buchstaben | abcdefghijklmnopqrstuvwxyz |
%u | Ein großes Buchstaben-Zeichen | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d | Jede Zahl (Nummer) | 0123456789 |
%p | Jeder Interpunktionszeichen | !@#;,. |
%w | Ein alphanumerisches Zeichen (eine Buchstabe oder eine Zahl) | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 |
%s | Ein Leertaste oder ein Weißraumzeichen | \n und 0> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> 1> 2> 3> |
%c | Ein spezieller Steuerungscookie | |
%x | Ein hexadecimaler Charakter | 0123456789ABCDEF |
%z | Der NULL-Charakter ( \0 ) |
Für einzelne Zeichen wie %a und %s , der entsprechende obere Großbuchstabe repräsentiert das "Gegenteil" der Klasse. Zum Instanzrepräsentiert %p einen Punktionszeichen, während 1> %P1> alle Zeichen außer Punktionen repräsentiert.
Magische Zeichen
Es gibt 12 "magische Zeichen", die für bestimmte Zwecke in Mustern reserviert sind:
$ | % | ^ | * | ( | ) |
. | [: | ] | + | - | ? |
Sie können entkommen und nach magischen Zeichen suchen, indem Sie das % -Symbol verwenden. Zum Beispiel, um nach roblox.com zu suchen, verwenden Sie das . (Kreis) -Symbol vor dem Zeichen mit einem 1> %1> als in 4> % 4> .
-- „roblox.com“ entspricht „roblox#com“, da der zeitraum als „jeder charakter“ interpretiert wirdlocal match1 = string.match("What is roblox#com?", "roblox.com")print(match1) --> roblox#com-- Entkomme dem Zeitraum mit % , damit er als literales Zeichen interpretiert wirdlocal match2 = string.match("I love roblox.com!", "roblox%.com")print(match2) --> roblox.com
Veranker
Sie können ein Muster am Anfang oder am Ende eines Strings suchen, indem Sie die ^ und $-Symbole verwenden.
local start1 = string.match("first second third", "^first") -- Matches, weil "erst" am Anfang istprint(start1) --> zuerstlocal start2 = string.match("third second first", "^first") -- Übereinstimmt nicht, da "erst" nicht am Anfang istprint(start2) --> nulllocal end1 = string.match("first second third", "third$") -- Matches, weil "third" am beendenistprint(end1) --> drittelocal end2 = string.match("third second first", "third$") -- Übereinstimmt nicht, da "dritter" nicht am beendenistprint(end2) --> nil
Du kannst auch beide ^ und zusammen verwenden, um sicherzustellen, dass ein Muster nur die volle Zeichenkette entspricht und nicht nur einige Teile davon.
-- Verwendung von both ^ und $ für das Matching eines vollständigen Stringslocal match1 = string.match("Roblox", "^Roblox$") -- Matches, da "Roblox" die gesamte Zeichenkette ist (Ähnlichkeit)print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- Übereinstimmt nicht, da "Roblox" nicht am Anfang und am beendenistprint(match2) --> nulllocal match3 = string.match("I play Roblox", "Roblox") -- Matches, weil "Roblox" in "Ich spiele Roblox" enthalten istprint(match3) --> Roblox
Klassen-Modifikatoren
Mit sich selbst, einer Zeichenklasse, die nur einen Zeichen in einer Stringübereinstimmt. Zum Instanzbeginnt die folgende Muster ( "%d" ) die Zeile von links nach rechts zu lesen, findet das erste Zeichen ( 2> 22> ) und stoppt.
local match = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match) --> 2
Sie können Modifikatoren mit jeder Charakterklasse verwenden, um das Ergebnis zu steuern:
Quantifier | Bedeutung |
---|---|
+ | Erstellen Sie 1 oder mehrere der vorherigen Zeichenklasse |
- | Match so viele der vorherigen Zeichenklasse wie möglich |
* | Erstellen Sie 0 oder mehr von der vorherigen Zeichenklasse |
? | Erstellen Sie 1 oder weniger der vorherigen Zeichenklasse |
%n | Für n zwischen 1 und 9 entspricht ein Unterstrich einem substring, der der 1> n1> th gefangenen Stringentspricht. |
%bxy | Die ausgeglichene Capture-Matching x , y , und alles zwischen (z. B. %b() entspricht einer Reihe von Eltern und allem zwischen ihnen) |
Ein Modifikator am selben Muster hinzufügen ( "%d+" anstelle von "%d"), gibt Ausgaben 25 anstelle von 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
Klassensets
Setzt sollte verwendet werden, wenn eine einzelne Zeichenklasse nicht den gesamten Job erledigen kann. Zum Instanzmöchten Sie beide untere Großbuchstaben ( %l ) und und Zeichen mit Punktionen ( 0> %p 0> ) mit einem einzigen Muster übereinstimmen.
Sets werden durch Klammern [] um sie herum definiert. Im folgenden Beispiel beachten Sie den Unterschied zwischen dem Gebrauch eines Sets ( "[%l%p]+" ) und dem Gebrauch eines Sets ( nicht " Sets verwenden ( 1> "%l%p+"1> ).
local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Setzenprint(match1) --> hallo!!!local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Nicht festgelegtprint(match2) --> o!!!
Das erste Kommando (festlegen) sag Luau, dass er sowohl Groß- als auch kleinschreibende Zeichen als auch Satzzeichen finden soll. Mit dem +, der nach dem gesamten festlegenhinzugefügt wurde, findet er alle dieser Zeichen ( ello!!!, stoppt, wenn er den Platzerreicht.
Im zweiten Befehl (nicht festgelegt) gilt der + nur für die %p -Klasse vor ihm, so dass Luau den ersten unteren Großbuchstaben ( o ) vor der Reihe der Interpunktion ( 2>!!!2> ) nur den ersten Unterstrich zeichnet.
Wie Charakterklassen können Set-Klassen "Gegensätze" sein. Dies wird durch das Hinzufügen eines ^ Charakters am Anfang des festlegengetan, direkt nach dem Öffnen [ . Zum Instanzrepräsentiert "[%p%s]+" sowohl Interpunktionen als auch Leerstellen, während
Setzt auch Reichweite unterstützt, mit der du eine gesamte Reihe von Matches zwischen einem Start- und End-Charakter finden kannst. Dies ist eine fortgeschrittene Funktion, die im Lua 5.1 Manual erläutert ist.
Schnellstrumpf-Erfassung
String captures sind Sub-Pattern innerhalb eines Musters. Diese werden in Klammern () eingeschlossen und verwendet, um (Match) passende Unterstriche zu erhalten und sie an Variablen zu speichern. Zum Beispiel enthält das folgende Muster zwei Captures, (%a+) und 1> percentd+1>, die jeweils zwei Unterstränge nach einem erfolgreichen übereinstimmenzurückgeben
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) --> ZweiThousand 2000local key3, val3 = string.match("OneMillion=1000000", pattern)print(key3, val3) --> OneMillion 1000000
Im vorherigen Muster ist der ? -Zähler, der beide der %s -Klassen folgt, eine sichere Ergänzung, da er den Platz auf der anderen Seite des = -Zeichens optional macht. Das bedeutet, dass das Match erfolgreich ist, wenn einer (oder beide) der Bereiche fehlen.
String-Captures können auch verschachtelt sein, wie in dem folgenden Beispiel:
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--> Das Cloud Kingdom ist himmlisch--> Cloud-Königreich--> Das Waldreich ist friedlich--> Forest Kingdom
Diese Muster-Suche funktioniert wie folgt:
Der string.gmatch()iterator sucht nach einem Match auf dem gesamten "Beschreibung"-Muster, das von der äußeren Paar von Klammern definiert ist. Dies stoppt bei dem ersten Komma und erfasst gefolgte Profile:
# | Muster | Erfassen |
---|---|---|
1 | (Das %s%a+%sKingdom][%w%s+) | Das Cloud Kingdom ist himmlisch |
Durch seine erfolgreiche erste erfassen, sucht der Iterator dann eine Match auf dem "Kingdom"-Muster, das von der inneren Paar von Klammern definiert ist. Dieses verdrehte Muster einfacht ein Match auf gefolgte Profile:
# | Muster | Erfassen |
---|---|---|
2 | :%a+%sKönigreich) | Wolkenreich |
Der Iterator zieht dann zurück und sucht weiter nach der vollständigen String, die gefolgte Profileaufgreift:
# | Muster | Erfassen |
---|---|---|
3 | (Das %s%a+%sKingdom][%w%s+) | Das Waldreich ist friedlich |
4 | :%a+%sKönigreich) | Wald Königreich |
Darüber hinaus gibt es einen speziellen Fall mit einer leeren Capture ( () ). Wenn eine Capture leer ist, wird die Position in der Zeile erkannt:
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
Diese speziellen Käpturen können wie normale Käpturen verschachtelt werden:
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
Die zurückgegebenen Werte sind ungewöhnlich, da sie Zahlen sind, nicht Strings:
local match = "This is an example"local pattern = "This is an ()example"local position = string.match(match, pattern)print(typeof(position)) --> number