Smocze

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Typ danych string jest to kolejka znaków, takich jak litery, numery i symbole. Jest to typ danych do przechowywania większości informacji bazowych.

Oświadczanie zmian

Aby zadeklarować zmienne strumieni, umieść cytaty wokół znaków. Jest powszechnie stosowane używanie podwójnych cytatów ( " ) lub pojedynczych cytatów ( ' ) również działa. Jeśli chcesz włączyć pojedynczy czy podwójny cytat w swojej wierszu, otul swoją wiersz wokół innego typu cytatu lub użyj ucieczki


local string1 = "Hello world!"
print(string1) --> Cześć świata!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Aby włączyć pojedyncze i podwójne cytaty w ciągu, lub stworzyć wielostrzępne ciągi, zadeklaruj je używając podwójnych nawiasów:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Witaj
--> świat!
--> Cześć "świata"!
--> Hello 'world'!

Jeśli to konieczne, możesz zagnądzać wiele napełnionych nawiasów w ciągu używając tego samego liczby znaków w początkowym i końcowym nawiasie:


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

Łączenie smyczy

Aby połączyć strły, łącz je ze sobą za pomocą dwóch krop ( .. ). Łączenie stron nie wstawia przestrzeni między nimi, więc będziesz musiał włączyć przestrzeń(y) na końcu/początku poprzedniego/śledniego ciąg, lub łączyć przestrzeń między dwoma strzymi.


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) --> Cześć świata!
print(string3) --> Hello world!

Uwaga, że komenda print() wymaga wiele argumentów i łączy je z przestrzeniami, więc możesz użyć , zamiast 2>..2>, aby wydać przestrzenie w wynikach 5>print()5>.


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Helloworld!
print(hello, world .. exclamationMark) --> Cześć świata!
print(hello, world, exclamationMark) --> Hello world !

Konwersja Strings

Aby przekonać ciąg pusty w liczbę, użyj funkcji tonumber(). Jeśli ciąg nie ma przedstawienia liczbowego, tonumber() zwraca nil.


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

Ucieczka z wiązań

Aby uciec od podwójnej lub pojedynczej deklaracji zmiany znaku i wbudować prawie każdego postaci, umieść znak wygwiazdkowania ( \ ) przed postacią. Na przykład:

  • Aby wbudować pojedynczy cytat w pojedynczych wierszach, użyj \' .
  • Aby wbudować podwójne cytat w podwójnej wiadomości cytatowej, użyj \" .

local string1 = 'Hello \'world\'!'
print(string1) --> Cześć "świata"!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

Niektóre znaki po naciskach backspace'u produkują specjalne znaki, a nie ucieczki znaków:

  • Aby wstawić nową linię, użyj \n .
  • Aby wstawić poziomą zakładkę, użyj \t .

local string1 = "Hello\nworld!"
print(string1)
--> Witaj
--> świat!
local string2 = "Hello\tworld!"
print(string2) --> Hello world!

Przetłumaczenie znaków

Luau wspiera interpretację ciągów znaków , która umożliwia wstawienie wyrażeń do ciągów znaków. Użyj znaczników ( ` ) do deklarowania interpretowanej ciągiem znaków, a następnie dodaj wyrażenia w środku nawiasów:


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

Chociaż zmienne są najczęściej używane, możesz użyć dowolnej wyrażenia, w tym matematyki:


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) --> Cześć świata, 1 raz!
print(string2) --> Cześć świata, 2 razy!
print(string3) --> Hello world a third time!

Standardowe zasady ucieczki mają zastosowanie do backticks, curly brackets i backslashes:


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

Konwersja matematyczna

Jeśli wykonasz na ciągoperacje matematyczne, Luau automatycznie konwertuje łańcuch w liczbę. Jeśli łańcuch nie ma przedstawienia liczbowego, to błądzi.


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

Porównania

Strings można porównać używając <code><code> <code> <code> <code> <code> <code> <code> <code> <code> <


print("Apple" < "apple") --> prawdziwy
print("Banana" < "apple") --> prawdziwy (B jest przed A w ASCII)
print("number100" < "number20") --> true

Referencja wzorca strumieni

Pattern stron jest kombinacją znaków, które możesz użyć z Library.string.dopasowywać(), string.match() i innymi funkcjami, aby znaleźć kawałek lub podstronę dłuższego ciągu.

Bezpośrednie mecze

Możesz używać bezpośrednich dopasów w funkcji Luau, takiej jak string.match(), z wyjątkiem znaków magicznych. Na przykład, te komendy szukają słowa Roblox w ciągu strzyżki:


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

Klasy postaci

Klasy znaków są niezbędne dla bardziej zaawansowanych wyszukiwań strungowych. Możesz ich używać do wyszukiwania czegoś, co nie jest niezbędnie klasowe, ale pasuje do znanej kategorii (klasy), w tym litery, cyfry, przestrzenie, 2> przerwy2> i wiele więcej.

Poniższy tabela pokazuje oficjalne klasy postaci dla wzorów strumieni Luau:

KlasaReprezentujePrzykładowy mecz
.Dowolny znak32kasGJ1%fTlk?@94
%aMała lub duża literaaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lMniejsza litraabcdefghijklmnopqrstuvwxyz
%uGórna litraABCDEFGHIJKLMNOPQRSTUVWXYZ
%dDowolna liczba (number)0123456789
%pDowolny znak zapisu!@#;,.
%wAlfanumeryczny znak (czyt. litera lub liczba)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sPrzestrzeń lub białą przestrzeń postaci \r
%cSpecjalny postać sterowania
%xZadziesiątkowodzielny znak0123456789ABCDEF
%zPrzerwa ( \0 )

Dla pojedynczych znaków charakteru, takich jak %a i %s, odpowiednią literą górnej części jest znak „|”. Na instancja, %p reprezentuje znak zapisu przecinku, a 1> %P1> reprezentuje wszystkie znaki, z wyjątkiem zapisu przecinku.

Znaki magiczne

Są 12 "magicznych znaków" które są zarezerwowane dla celów specjalnych w wzorcach:

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

Możesz uciec i szukać magicznych znaków używając symbolu %. Na przykład, aby szukać roblox.com, uciekaj z . (okres) symbolu poprzez przedrostkę 2> %2> .


-- „roblox.com” pasuje do „roblox#com”, ponieważ okres jest interpretowany jako „dowolny postać”
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Ucieczka z okresu z % aby zostać zeskanowanym jako znak literacki
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Zakorowania

Możesz szukać wzoru na początku lub na końcu ciągu, używając symboli ^ i $.


local start1 = string.match("first second third", "^first") -- Ma치, ponieważ "pierwszy" jest na początku
print(start1) --> pierwszy
local start2 = string.match("third second first", "^first") -- Nie pasuje, ponieważ "pierwszy" nie jest na początku
print(start2) --> zero
local end1 = string.match("first second third", "third$") -- Ma치, ponieważ "trzeci" jest na kończyć
print(end1) --> trzeci
local end2 = string.match("third second first", "third$") -- Nie pasuje, ponieważ „trzeci” nie jest na kończyć
print(end2) --> nil

Możesz również użyć obu ^ i $ , aby upewnić się, że wzór pasuje tylko do całej wartości, a nie tylko do niektórej części.


-- Używanie zarówno ^, jak i $ do dopasowania w całej ciąg
local match1 = string.match("Roblox", "^Roblox$") -- Zgadza się, ponieważ "Roblox" to cała stringa (równość)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Nie pasuje, ponieważ "Roblox" nie jest na początku I kończyć
print(match2) --> zero
local match3 = string.match("I play Roblox", "Roblox") -- Zgadza się, ponieważ "Roblox" jest zawarty w "I play Roblox"
print(match3) --> Roblox

Modyfikatory klasy

Sama w sobie klasa znaku charakteru tylko pasuje do jednego znaku charakteru w ciągu. Na instancjaponiższy wzór ( >%d "2" ) zaczyna czytać całą cześć z lewej do prawej strony, znajduje pierwszy znak ( "%d" ) i kończy.


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

Możesz użyć modyfikatorów z dowolną klasą postaci, aby kontrolować wynik:

IlośćZnaczenie
+Zgadza się 1 lub więcej z wcześniejszej klasy znaku
-:Zgaduj, ile z wcześniejszych klas postaci
*Zgaduj 0 lub więcej z poprzednich klas postaci
?Zgadza się 1 lub mniej z poprzednim klasą znaku
%nFor n between 1 and 9, match a substring equal to the 1>n1> th captured ciąg.
%bxyZrównoważonej captury dopasującej x, y i wszystkiego pomiędzy (na przykład, %b() dopasuje pary nawiasów i wszystko pomiędzy nimi)

Dodanie modyfikatora do tego samego wzoru ( "%d+" zamiast "%d" ) wygibt wynik 25 zamiast 1> 21> :


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

Zestawy klas

Ustawienia należy używać, gdy pojedyncza klasa znaku może nie zrobić całej pracy. Na instancjamożesz chcieć dopasować obie małe litery ( %l ) i znaki przerwy ( 0> %p 0> ) używając jednego wzoru.

Zestawy są zdefiniowane przez nawiasy [] wokół nich. W następnym przykładzie zauważaj różnicę między użyciem zestawu ( "[%l%p]+" ) i nie użyciem zestawu ( " ).


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Ustawić
print(match1) --> cześć!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Niezdefiniowany
print(match2) --> o!!!

Pierwszy komend (ustawiać) mówi Luau, aby znaleźć zarówno znaki nieduże, jak i znaki interpunktji. Z wskaźnikiem + dodanym po całym ustawiaćznajduje wszystko z tych znaków ( ello!!! ). Gdy dotyka przestrzeni, zatrzymuje się.

W drugim przykazaniu (niezdefiniowanym) kalkulator + stosuje się tylko do klasy %p przed nim, więc Luau grabi tylko pierwszy znak nieduży o przed serią przecinków ( 2> !!!2> ).

Podobnie jak klasy postaci, można ustawić, że ^ klasy mogą być "przeciwieństwami" siebie. To jest zrobione poprzez dodanie [ znaku postaci na początku ustawiać, bezpośrednio po otwarciu "[%p%s]+" . Na instancja, 2> "[

Ustawienia wspierają również zakresy, które pozwalają znaleźć cały zakres meczów między początkowym i końcowym postacią. Jest to zaawansowana funkcja, która jest opisana bardziej szczegółowo w Manual Lua 5.1.

Zdrapywanie znaków

String captures są pod Pattern. Te są zamknięte w nawiasach () i są używane do uzyskania (przechwytywać) dopasujących substringów i zapisu ich na zmienne. Na przykład poniższy wzór zawiera dwa captures, (%a+) i 1> percentd+1>, które zwracają dwa substringi po udanym


local pattern = "(%a+)%s?=%s?(%d+)"
local key1, val1 = string.match("TwentyOne = 21", pattern)
print(key1, val1) --> Dwadzieścia jeden 21
local key2, val2 = string.match("TwoThousand= 2000", pattern)
print(key2, val2) --> Dwóch tysiące 2000
local key3, val3 = string.match("OneMillion=1000000", pattern)
print(key3, val3) --> OneMillion 1000000

W poprzednim wzorcu kalkulator ? %s obejmujący obie %s klasy, jest bezpieczną dodatką, ponieważ tworzy przestrzeń na obu stronach znaku =. Oznacza to, że ​​match zakończy się, jeśli jedna (lub obie) przestrzenie są niedostępne wokół znaku równości.

Kaptyury stron można również nestować jako następujący przykład:


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
--> Królestwo Chmur jest niebioskie
--> Królestwo chmur
--> Królestwo Leśne jest pokojne
--> Forest Kingdom

Ta wyszukiwarka wzorów działa następująco:

Library.string.gmatch()Library.string.gmatch() szuka dopasu na całym wzorem opisu zdefiniowanym przez zewnętrzną parę nawiasów. To zatrzymuje się na pierwszym komencie i kryje obserwuje:

#WzórZdobądź
1: (The%s/%a+%sKingdom) [%w%s+]Królestwo Chmur jest niebioskie

Korzystając z jego udanego pierwszego przechwytywać, wtedy generator szuka dopasu na wzór królestwa zdefiniowany przez wewnętrzną parę nawiasów. Ten następujący wzór jest po prostu capturesz obserwuje:

#WzórZdobądź
2)%a+%sKrólestwo)Królestwo chmur

iterator wtedy się wyłącza i nadal szuka całej ciąg, zachwycając obserwuje:

#WzórZdobądź
3) (The%s/%a+%sKingdom) [%w%s+]Królestwo Leśne jest pokojne
4)%a+%sKrólestwo)Królestwo Lasu

Oprócz wszystkich powyższych, istnieje specjalny przypadek z pustą capturą (()). Jeśli captura jest pusta, to pozycja w linii będzie capturowana:


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

Te specjalne chwyty mogą być gniażdżone jak zwykłe:


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

Zwracane wartości są niezwykłe, ponieważ są liczbami a nie stringami:


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