Schnüre

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Der Schnurdatentyp ist eine Sequenz von Zeichen, wie Buchstaben, Zahlen und Symbole.Es ist der Datentyp für das Speichern der meisten textbasierten Informationen.

Erkläre Zeichenketten

Um eine Zeichenvariable zu deklarieren, stelle Zitate um die Zeichen herum bereit.Es ist üblicher, doppelte Anführungszeichen zu verwenden ( " ), aber auch einzelne Anführungszeichen ( ' ) funktionieren.Wenn du einen einzelnen oder doppelten Anführungsstrich in deiner Stringeinfügen möchtest, wickle deine Zeichenkette um den anderen Anführungsstrich herum oder verwende einen entkommenen Anführungsstrich.


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 Stringeinzuschließen oder mehrzeilige Zeichenketten zu erstellen, erkläre sie mit doppelten Klammern:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Hallo
--> welt!
--> Hallo "Welt"!
--> Hello 'world'!

Wenn nötig, können Sie mehrere Klammern in einer Zeichenkette verschachteln, indem Sie die gleiche Anzahl gleichartiger Zeichen sowohl in der Anfangs- als auch in der Endklammer verwenden:


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

Zeichenketten kombinieren

Um Zeichenfolgen zu kombinieren, verbinden sie mit zwei Punkten ( .. ).Das Verketten von Zeichenketten fügt keine Leerstelle zwischen ihnen ein, du musst also am Ende/Anfang einer vorherigen/folgenden Stringeinen (oder mehrere) Platzeinfügen oder eine Leerstelle zwischen den beiden Zeichenketten kombinieren.


local hello = "Hello"
local helloWithSpace = "Hello "
local world = "world!"
local string1 = hello .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(string1) --> Hallowelt!
print(string2) --> Hallo Welt!
print(string3) --> Hello world!

Beachten Sie, dass die print() Befehl mehrere Argumente verwendet und sie mit ] Leerstellen kombiniert, so dass Sie , anstelle von .. verwenden können, um Leerstellen in print() Ausgaben zu erhalten.


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Hallowelt!
print(hello, world .. exclamationMark) --> Hallo Welt!
print(hello, world, exclamationMark) --> Hello world !

Zeichenfolgen konvertieren

Um einen String in eine Zahl umzuwandeln, verwende die tonumber() Funktion. Wenn der String keine Zahlendarstellung hat, gibt tonumber() zurück nil.


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

Entkommende Zeichenketten

Um einer doppelten oder einfachen Anführungszeichen-Erklärung zu entkommen und fast jeden Zeichen einzubetten, setze einen Rücktaste ( \ ) vor dem Zeichen.Zum Beispiel:

  • Um eine einzige Zitation in einen einzigen Stringeinzufügen, verwende \'.
  • Um ein doppeltes Zitat in einen doppelten Stringeinzufügen, verwende \".

local string1 = 'Hello \'world\'!'
print(string1) --> Hallo 'Welt'!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

Bestimmte Zeichen, die nach Rücktasten folgen, produzieren spezielle Zeichen anstelle von entkommenen Zeichen:

  • Um eine neue Zeile einzufügen, verwende \n.
  • Um eine horizontale Registerkarte einzufügen, verwende \t.

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

Interpolation

Luau unterstützt Schnurinterpolation , eine Funktion, mit der du Ausdrücke in Zeichen einfügen kannst.Verwende Backticks ( ` ), um eine interpolierte Stringzu deklarieren, und füge dann Ausdrücke in geschweiften Klammern hinzu:


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

Obwohl Variablen die häufigste Verwendung sind, kannst du jede Ausdruck verwenden, einschließlich Mathe:


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) --> Hallo Welt, 1 Mal!
print(string2) --> Hallo Welt, 2 Mal!
print(string3) --> Hello world a third time!

Standard-Fluchtbeschränkungen gelten für Backticks, kurze Klammern und Rückschläge:


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

Mathematische Konvertierung

Wenn Sie mathematische Operationen an einem String durchführen, konvertiert Luau den String automatisch in eine Zahl.Wenn der String keine Zahlendarstellung hat, wird ein Fehler geworfen.


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

Vergleiche

Schnüre können mit den <, <=, > und >= Operatoren verglichen werden, die basierend auf der lexikalischen Reihenfolge der ASCII-Codes eines jeden Zeichens in einer Stringvergleichen.Dies führt dazu, dass Zahlen in Zeichen nicht richtig verglichen werden, zum Beispiel wird "100" weniger als "20" sein, da die Bytes "0" und "1" geringere ASCII-Codes haben als der Byte "2" .


print("Apple" < "apple") --> wahr
print("Banana" < "apple") --> true (B ist vor einem in ASCII)
print("number100" < "number20") --> true

Schnurmustervorlage

Ein Zeichenmuster ist eine Kombination von Zeichen, die du mit string.match() , string.gmatch() und anderen Funktionen verwenden kannst, um ein Element oder einen Substring einer längeren Stringzu finden.

Direkte Übereinstimmungen

Du kannst direkte Übereinstimmungen in einer Luau-Funktion wie string.match() verwenden, mit Ausnahme von magischen 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) -->Roblox
print(match2) --> nil

Klassen

Zeichenklassen sind für fortgeschrittene Zeichensuche unerlässlich.Du kannst sie verwenden, um nach etwas zu suchen, das nicht unbedingt charakterpezifisch ist, aber in eine bekannte Kategorie (Klasse) passt, einschließlich Buchstaben , Zahlen , Leerstellen , Punctuation und mehr.

Die folgende Tabelle zeigt die offiziellen Charakterklassen für Luau-Schnelltextmuster:

KlasseVertreibtBeispiel-Match
.Jeder Charakter32kasGJ1%fTlk?@94
%aEin Großbuchstabe oder ein KleinschreibstabeaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lEin kleiner Buchstabeabcdefghijklmnopqrstuvwxyz
%uEin GroßbuchstabeABCDEFGHIJKLMNOPQRSTUVWXYZ
%dJede Zahl (Nummer)0123456789
%pJeder Punktzeichencharakter!@#;,.
%wEin alphanumerischer Zeichen (entweder ein Buchstabe oder eine Zahl)abcdefghijklmnopqrsztuvwxyz0123456789
%sEin Leerzeichen- oder Leertzeichencharakter , \n , und \r
%c >Ein spezieller Steuerzeichen
%xEin hexadezimaler Zeichen01234
%zDer NULL-Zeichen ( \0 )

Für Klassen mit einzelnem Buchstabensymbol wie %a und %s repräsentiert der entsprechende Großbuchstabe das "Gegenteil" der Klasse.Zum Instanzrepräsentiert %p einen Zeichenpunkt, während %P alle Zeichen außer der Punktierung repräsentiert.

Magische Zeichen

Es gibt 12 "magische Zeichen", die für spezielle Zwecke in Mustern reserviert sind:

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

Du kannst entkommen und magische Zeichen suchen, indem du das %-Symbol verwendest.Zum Beispiel, um nach roblox.com zu suchen, entkomme dem . (Zeichen) -Symbol, indem du es mit einem % vorangibst, wie in %. .


-- die übereinstimmung "roblox.com" mit "roblox#com" liegt daran, dass die periode als "jede zeiche" interpretiert wird
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Entkomme der Periode mit %, damit sie als einfacher Periode-Zeichen interpretiert wird
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Anker

Du kannst nach einem Muster am Anfang oder am Ende einer Zeichenkette suchen, indem du die ^ und $ Symbole verwendest.


local start1 = string.match("first second third", "^first") -- Matches, weil "erst" am Anfang ist
print(start1) --> zuerst
local start2 = string.match("third second first", "^first") -- Passt nicht, weil "erst" nicht am Anfang ist
print(start2) --> null
local end1 = string.match("first second third", "third$") -- Matches, weil "dritt" am beendenist
print(end1) --> dritte
local end2 = string.match("third second first", "third$") -- Passt nicht, weil "dritt" nicht am beendenist
print(end2) --> nil

Du kannst auch sowohl ^ als auch $ zusammen verwenden, um sicherzustellen, dass ein Muster nur die volle Zeichenfolge und nicht nur einen Teil davon übereinstimmt.


-- Verwendung von ^ und $, um über eine volle Stringhinweg zu passen
local match1 = string.match("Roblox", "^Roblox$") -- Matches, weil "Roblox" die gesamte Zeichenkette ist (Gleichheit)
print(match1) -->Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Passt nicht, weil "Roblox" nicht am Anfang UND am beendenist
print(match2) --> null
local match3 = string.match("I play Roblox", "Roblox") -- Matches, weil "Roblox" in "Ich spiele Roblox" enthalten ist
print(match3) --> Roblox

Klassenmodifizierer

Allein eine Charakterklasse passt nur auf einen Zeichen in einer Stringzu.Zum Instanzbeginnt das folgende Muster ( "%d" ) mit dem Lesen des Strangs von links nach rechts, findet die erste Zahl ( 2 ), und hört auf.


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

Du kannst Modifizierer mit jeder Zeichenklasse verwenden, um das Ergebnis zu kontrollieren:

QuantifikatorBedeutung
+Passen Sie 1 oder mehr der vorherigen Zeichenklasse an
-Passen Sie so wenig wie möglich der vorherigen Zeichenklasse gleich
*Passen Sie 0 oder mehr der vorherigen Zeichenklasse an
?Passen Sie 1 oder weniger der vorherigen Zeichenklasse an
%nFür n zwischen 1 und 9 entspricht ein Substring dem n aufgenommenen String.
:%bxyDie ausgeglichene Aufnahme, die übereinstimmt mit x , y , und alles dazwischen (zum Beispiel, %b() passt zu einer Reihe von Klammern und allem, was sich dazwischen befindet)

Das Hinzufügen eines Modifiers zum gleichen Muster ( "%d+" statt "%d" ), gibt Ausgaben 25 statt 2 aus:


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

Klassensätze

Sets sollten verwendet werden, wenn eine einzige Zeichenklasse den gesamten Job nicht erledigen kann.Zum Instanzmöchten Sie vielleicht beide Großbuchstaben ( %l ) und Interpunktionszeichen ( %p ) mit einem einzigen Muster übereinstimmen lassen.

Sätze werden durch Klammern [] um sie herum definiert.Im folgenden Beispiel beachten Sie den Unterschied zwischen der Verwendung eines Sets ( "[%l%p]+" ) und nicht Verwendung eines Sets ( "%l%p+" ).


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Festlegen
print(match1) --> hallo!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Nicht festgelegt
print(match2) --> o!!!

Der erste Befehl (festlegen) sagt Luau, sowohl kleine Buchstaben als auch Punctuation zu finden.Mit dem Quantifikator +, der nach der gesamten festlegenhinzugefügt wurde, findet er alle dieser Zeichen ( ello!!! ), hört auf, wenn er den Platzerreicht.

Im zweiten Befehl (nicht festgelegt) gilt der + Quantifikator nur für die %p Klasse vorher, also greift Luau nur den ersten kleinbuchstabigen Zeichen ( o ) vor der Reihe der Interpunktionen ( !!! ).

Wie Klassenkönnen Sätze "Gegensätze" von sich selbst sein.Dies wird durch die Ergänzung eines ^ Zeichens am Beginn des festlegenerledigt, direkt nach der Öffnung [.Zum Instanzrepräsentiert "[%p%s]+" sowohl Interpunktionen als auch Leerstellen, während "[^%p%s]+" alle Zeichen außer Interpunktionen und Leerstellen repräsentiert.

Sätze unterstützen auch Bereiche , die es Ihnen ermöglichen, eine gesamte Reihe von Übereinstimmungen zwischen einem Start- und Endzeichen zu finden.Dies ist eine fortgeschrittene Funktion, die im Lua 5.1-Handbuch im Detail beschrieben ist.

Schnelltext-Aufnahmen

Schnur Einfang sind Untermuster innerhalb eines Musters.Diese werden in Klammern () geschlossen und werden verwendet, um passende Unterstriche zu erhalten und sie in Variablen zu speichern.Zum Beispiel enthält das folgende Muster zwei Captures, (%a+) und (%d+), die bei einem erfolgreichen übereinstimmenzwei Substrings zurückgeben.


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

Im vorherigen Muster ist der ? Quantifikator, der beiden %s Klassen folgt, eine sichere Ergänzung, weil er den Raum auf der einen Seite des = Zeichens optional macht.Das bedeutet, dass das Spiel erfolgreich ist, wenn ein (oder beide) Räume um das gleichheitszeichen herum fehlen.

Schnelltext-Aufzeichnungen können auch verschachtelt sein, wie das folgende 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) do
print(description)
print(kingdom)
end
--> Das Cloud-Königreich ist himmlisch
--> Wolkenreich
--> Das Waldreich ist friedlich
--> Forest Kingdom

Diese Muster-Suche funktioniert wie folgt:

Der string.gmatch() Iterator sucht nach einem Übereinstimmungsmuster auf der gesamten "Beschreibung"-Vorlage, die vom äußeren Paar von Klammern definiert wurde.Dies stoppt beim ersten Komma und erfasst gefolgte Profile:

#VorlageEinfangen
1(Die%s(%a+%sKönigreich)[%w%s]+)Das Cloud-Königreich ist himmlisch

Mit seiner erfolgreichen ersten erfassensucht der Iterator dann nach einem Match auf dem "Königreich"-Muster, das vom inneren Paar von Klammern definiert wurde.Dieses verschachtelte Muster erfasst einfach gefolgte Profile:

#VorlageEinfangen
2(%a+%sKönigreich)Wolkenreich

Der Iterator zieht sich dann zurück und sucht weiter die gesamte String, indem er gefolgte Profileeinfängt:

#VorlageEinfangen
3(Die%s(%a+%sKönigreich)[%w%s]+)Das Waldreich ist friedlich
4(%a+%sKönigreich)Wald Königreich

Zusätzlich zu all dem oben Gesagten gibt es einen besonderen Fall mit einem leeren Fang ( () ).Wenn eine Aufnahme leer ist, wird die Position in der Zeile aufgenommen:


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

Diese speziellen Aufnahmen können wie normale aufgestapelt 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) do
print(kingdom, position)
end
--> Wolke 10
--> Forest 42

Die zurückgegebenen Werte sind ungewöhnlich, da sie Zahlen sind, anstatt Zeichen:


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