Napisy

*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 to sekwencja znaków, takich jak litery, cyfry i symbole. To typ danych do przechowywania większości informacji tekstowych.

Deklarowanie napisów

Aby zadeklarować zmienną typu string, otocz znaki cudzysłowami. Częściej używa się podwójnych cudzysłowów ("), ale pojedyncze cudzysłowy (') również działają. Jeśli chcesz umieścić pojedynczy lub podwójny cudzysłów w swoim napisie, otocz swój napis drugim typem cudzysłowu lub użyj escapowanego cudzysłowu.


local string1 = "Witaj świecie!"
print(string1) --> Witaj świecie!
local string2 = 'Witaj "świecie"!'
print(string2) --> Witaj "świecie"!

Aby uwzględnić zarówno pojedyncze, jak i podwójne cudzysłowy w napisie, lub utworzyć napisy wielowierszowe, zadeklaruj je używając podwójnych nawiasów:


local string1 = [[Witaj
świecie!
Witaj "świecie"!
Witaj 'świecie'!]]
print(string1)
--> Witaj
--> świecie!
--> Witaj "świecie"!
--> Witaj 'świecie'!

W razie potrzeby możesz zagnieżdżać wiele nawiasów w napisie, używając takiej samej liczby znaków równości zarówno w początku, jak i na końcu nawiasu:


local string1 = [=[Witaj
[[świecie!]]
]=]
print(string1)
--> Witaj
--> [[świecie!]]

Łączenie napisów

Aby połączyć napisy, konkatenować je za pomocą dwóch kropek (..). Łączenie napisów nie wstawia spacji między nimi, więc musisz uwzględnić spację na końcu/początku poprzedniego/następnego napisu, lub połączyć spację między dwoma napisami.


local hello = "Witaj"
local helloWithSpace = "Witaj "
local world = "świecie!"
local string1 = hello .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(string1) --> Witajświecie!
print(string2) --> Witaj świecie!
print(string3) --> Witaj świecie!

Zauważ, że polecenie print() przyjmuje wiele argumentów i łączy je z spacjami, więc możesz użyć , zamiast .., aby uzyskać spacje w wynikach print().


local hello = "Witaj"
local world = "świecie"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Witajświecie!
print(hello, world .. exclamationMark) --> Witaj świecie!
print(hello, world, exclamationMark) --> Witaj świecie !

Konwertowanie napisów

Aby przekonwertować napis na liczbę, użyj funkcji tonumber(). Jeśli napis nie ma reprezentacji liczbowej, tonumber() zwraca nil.


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

Escapowanie napisów

Aby escape'ować deklarację napisu z podwójnym lub pojedynczym cudzysłowem i osadzić prawie każdy znak, umieść znak backslash (\) przed znakiem. Na przykład:

  • Aby osadzić pojedynczy cudzysłów w napisie z pojedynczym cudzysłowem, użyj \'.
  • Aby osadzić podwójny cudzysłów w napisie z podwójnym cudzysłowem, użyj \".

local string1 = 'Witaj \'świecie\'!'
print(string1) --> Witaj 'świecie'!
local string2 = "Witaj \"świecie\"!"
print(string2) --> Witaj "świecie"!

Niektóre znaki następujące po backslashach produkują znaki specjalne, a nie escapowane znaki:

  • Aby osadzić nową linię, użyj \n.
  • Aby osadzić poziomy tabulator, użyj \t.

local string1 = "Witaj\nświecie!"
print(string1)
--> Witaj
--> świecie!
local string2 = "Witaj\tświecie!"
print(string2) --> Witaj świecie!

Interpolacja napisów

Luau wspiera interpolację napisów, cechę, która pozwala na wstawienie wyrażeń do napisów. Użyj backticks (`), aby zadeklarować napis z interpolacją, a następnie dodaj wyrażenia w klamrach:


local world = "świecie"
local string1 = `Witaj {world}!`
print(string1) --> Witaj świecie!

Chociaż zmienne są najczęstszym użyciem, możesz używać dowolnego wyrażenia, w tym matematyki:


local world = "świecie"
local number = 1
local letters = {"s", "w", "i", "e", "c", "i", "e"}
local string1 = `Witaj {world}, {number} raz!`
local string2 = `Witaj {world}, {number + 1} razy!`
local string3 = `Witaj {table.concat(letters)} po raz trzeci!`
print(string1) --> Witaj świecie, 1 raz!
print(string2) --> Witaj świecie, 2 razy!
print(string3) --> Witaj świecie po raz trzeci!

Standardowe zasady escapowania stosują się również do backticków, klamr i backslashów:


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

Konwersja matematyczna

Jeśli wykonujesz operacje matematyczne na napisie, Luau automatycznie konwertuje ten napis na liczbę. Jeśli napis nie ma reprezentacji liczbowej, wyrzuca błąd.


print("55" + 10) --> 65
print("55" - 10) --> 45
print("55" * 10) --> 550
print("55" / 10) --> 5.5
print("55" % 10) --> 5
print("Witaj" + 10) --> print("Witaj" + 10):1: próba wykonania działań arytmetycznych (dodawania) na napisie i liczbie

Porównania

Napisy mogą być porównywane za pomocą operatorów <, <=, > i >=, które porównują według porządku leksykalnego na podstawie kodów ASCII każdego znaku w napisie. To spowoduje, że liczby w napisach nie będą porównywane poprawnie, na przykład "100" będzie mniejsze od "20", ponieważ bajty "0" i "1" mają niższe kody ASCII niż bajt "2".


print("Jabłko" < "jabłko") --> true
print("Banan" < "jabłko") --> true (B jest przed a w ASCII)
print("number100" < "number20") --> true

Referencja wzorców napisów

Wzorzec stringowy to kombinacja znaków, której można użyć z string.match(), string.gmatch() i innymi funkcjami, aby znaleźć fragment, lub podłańcuch, dłuższego napisu.

Bezpośrednie dopasowania

Możesz używać bezpośrednich dopasowań w funkcji Luau takiej jak string.match(), z wyjątkiem znaków magicznych. Na przykład, te polecenia szukają słowa Roblox w napisie:


local match1 = string.match("Witaj w Robloxie!", "Roblox")
local match2 = string.match("Witaj w mojej niesamowitej grze!", "Roblox")
print(match1) --> Roblox
print(match2) --> nil

Klasy znaków

Klasy znaków są niezbędne do bardziej zaawansowanych wyszukiwań stringowych. Możesz ich używać, aby szukać czegoś, co niekoniecznie jest specyficzne dla znaków, ale mieści się w znanej kategorii (klasie), obejmującej litery, cyfry, spacje, znaki interpunkcyjne i inne.

Następująca tabela pokazuje oficjalne klasy znaków dla wzorców stringowych Luau:

KlasaReprezentujePrzykładowe dopasowanie
.Dowolny znak32kasGJ1%fTlk?@94
%aDuża lub mała literaaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lMała literaabcdefghijklmnopqrstuvwxyz
%uDuża literaABCDEFGHIJKLMNOPQRSTUVWXYZ
%dDowolna cyfra (liczba)0123456789
%pDowolny znak interpunkcyjny!@#;,.
%wDowolny znak alfanumeryczny (litera lub cyfra)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sSpacja lub znak białego miejsca , \n, i \r
%cSpecjalny znak sterujący
%xZnak szesnastkowy0123456789ABCDEF
%zZnak NULL (\0)

Dla klas znaków jednoliterowych, takich jak %a i %s, odpowiadająca wielka litera reprezentuje "przeciwieństwo" klasy. Na przykład, %p reprezentuje znak interpunkcyjny, podczas gdy %P reprezentuje wszystkie znaki, z wyjątkiem znaków interpunkcyjnych.

Znaki magiczne

Istnieje 12 "znaków magicznych", które są zarezerwowane do specjalnych celów w wzorcach:

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

Możesz escapować i szukać znaków magicznych za pomocą symbolu %. Na przykład, aby wyszukać roblox.com, escape'uj symbol . (kropkę) wcześniejszym %, jak w %..


-- "roblox.com" dopasowuje się do "roblox#com", ponieważ kropka jest interpretowana jako "dowolny znak"
local match1 = string.match("Co to jest roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Escape kropki z % tak, aby była interpretowana jako dosłowny znak kropki
local match2 = string.match("Uwielbiam roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Kotwice

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


local start1 = string.match("pierwszy drugi trzeci", "^pierwszy") -- Dopasowuje, ponieważ "pierwszy" jest na początku
print(start1) --> pierwszy
local start2 = string.match("trzeci drugi pierwszy", "^pierwszy") -- Nie dopasowuje, ponieważ "pierwszy" nie jest na początku
print(start2) --> nil
local end1 = string.match("pierwszy drugi trzeci", "trzeci$") -- Dopasowuje, ponieważ "trzeci" jest na końcu
print(end1) --> trzeci
local end2 = string.match("trzeci drugi pierwszy", "trzeci$") -- Nie dopasowuje, ponieważ "trzeci" nie jest na końcu
print(end2) --> nil

Możesz również używać zarówno ^, jak i $, aby upewnić się, że wzorzec dopasowuje się wyłącznie do całego napisu, a nie tylko jakiejś jego części.


-- Używanie zarówno ^, jak i $ do dopasowania całego napisu
local match1 = string.match("Roblox", "^Roblox$") -- Dopasowuje, ponieważ "Roblox" jest całym napisem (równość)
print(match1) --> Roblox
local match2 = string.match("Gram w Roblox", "^Roblox$") -- Nie dopasowuje, ponieważ "Roblox" nie jest na początku I końcu
print(match2) --> nil
local match3 = string.match("Gram w Roblox", "Roblox") -- Dopasowuje, ponieważ "Roblox" jest zawarte w "Gram w Roblox"
print(match3) --> Roblox

Modyfikatory klas

Sama klasa znaków dopasowuje tylko jeden znak w napisie. Na przykład, następujący wzorzec ("%d") zaczyna czytać napis od lewej do prawej, znajduje pierwszą cyfrę (2) i zatrzymuje się.


local match = string.match("Królestwo Chmur ma 25 klejnotów mocy", "%d")
print(match) --> 2

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

KwantyfikatorZnaczenie
+Dopasuj 1 lub więcej z poprzedniej klasy znaków
-Dopasuj jak najmniej z poprzedniej klasy znaków, jak to możliwe
*Dopasuj 0 lub więcej z poprzedniej klasy znaków
?Dopasuj 1 lub mniej z poprzedniej klasy znaków
%nDla n między 1 a 9, dopasowuje podłańcuch równy ntej złapanej strunie.
%bxyZbalansowane dopasowanie do x, y, i wszystkiego między nimi (na przykład, %b() dopasowuje parę nawiasów i wszystko, co między nimi)

Dodanie modyfikatora do tego samego wzorca ("%d+" zamiast "%d"), zwraca 25 zamiast 2:


local match1 = string.match("Królestwo Chmur ma 25 klejnotów mocy", "%d")
print(match1) --> 2
local match2 = string.match("Królestwo Chmur ma 25 klejnotów mocy", "%d+")
print(match2) --> 25

Zbiory klas

Zbiory powinny być używane, gdy pojedyncza klasa znaków nie jest w stanie wykonać całej pracy. Na przykład, możesz chcieć dopasować zarówno małe litery (%l), jak i znaki interpunkcyjne (%p) za pomocą jednego wzorca.

Zbiory definiuje się za pomocą nawiasów [] wokół nich. W poniższym przykładzie, zauważ różnicę pomiędzy używaniem zbioru ("[%l%p]+") i nie używaniem zbioru ("%l%p+").


local match1 = string.match("Witaj!!! Jestem innym napisem.", "[%l%p]+") -- Zbiór
print(match1) --> itaj!!!
local match2 = string.match("Witaj!!! Jestem innym napisem.", "%l%p+") -- Bez zbioru
print(match2) --> t!!!

Pierwsze polecenie (zbiór) mówi Luau, aby znaleźć zarówno znaki małe, jak i znaki interpunkcyjne. Przy dodanym po nim kwantyfikatorze +, znajduje wszystkie te znaki (itaj!!!), zatrzymując się, gdy sięga do spacji.

W drugim poleceniu (bez zbioru), kwantyfikator + dotyczy tylko klasy %p przed nim, więc Luau łapie tylko pierwszy znak mały (t) przed serią interpunkcyjnych (!!!).

Podobnie jak klasy znaków, zbiory mogą mieć "przeciwieństwa" same w sobie. Dzieje się to poprzez dodanie znaku ^ na początku zbioru, bezpośrednio za otwierającym [ . Na przykład, "[%p%s]+" reprezentuje zarówno znaki interpunkcyjne, jak i spacje, podczas gdy "[^%p%s]+" reprezentuje wszystkie znaki z wyjątkiem znaków interpunkcyjnych i spacji.

Zbiory wspierają także zakresy, które pozwalają znaleźć cały zakres dopasowań między znakiem początkowym i końcowym. Jest to zaawansowana cecha, która jest szczegółowo opisana w Podręczniku Lua 5.1.

Złapanie napisów

Złapanie napisów to podwzorzec w wzorcu. Są one zamknięte w nawiasach () i służą do uzyskania (uchwycenia) pasujących podłańcuchów i zapisania ich w zmiennych. Na przykład, poniższy wzór zawiera dwa złapania, (%a+) i (%d+), które zwracają dwa podłańcuchy po udanym dopasowaniu.


local pattern = "(%a+)%s?=%s?(%d+)"
local key1, val1 = string.match("DwudziestuJeden = 21", pattern)
print(key1, val1) --> DwudziestuJeden 21
local key2, val2 = string.match("DwaTysiące= 2000", pattern)
print(key2, val2) --> DwaTysiące 2000
local key3, val3 = string.match("JednaMilion=1000000", pattern)
print(key3, val3) --> JednaMilion 1000000

Kwantyfikator ?, który następuje po obu klasach %s, jest bezpiecznym dodatkiem, ponieważ czyni spację po obu stronach znaku = opcjonalną. Oznacza to, że dopasowanie powodzi, jeśli jedna (lub obie) spacje są pominięte wokół znaku równości.

W funkcji string.gsub() można включать grupy ujęć w ciąg zastępczy, używając %1, %2, %3 itd., aż do %9. Chociaż Luau wspiera aż 32 grupy ujęć przed wyrzuceniem błędu, możesz odwołać się tylko do pierwszych dziewięciu, używając tej składni:


local str = "miłość2zagrać w Roblox"
local pattern = "(%w+)(%d+)(%w+)%s+(%w+)"
local replacement = "Ja %1 %2 %3 %4!"
local result = string.gsub(str, pattern, replacement)
print(result) --> Ja miłość 2 zagrać w Roblox!

Możesz również zagnieżdżać złapania napisów:


local places = "Królestwo Chmur jest niebiańskie, Królestwo Lasu jest spokojne"
local pattern = "(Królestwo%s(%a+%sKrólestwo)[%w%s]+)"
for description, kingdom in string.gmatch(places, pattern) do
print(description)
print(kingdom)
end
--> Królestwo Chmur jest niebiańskie
--> Królestwo Chmur
--> Królestwo Lasu jest spokojne
--> Królestwo Lasu

To wyszukiwanie wzorców działa następująco:

Iterator string.gmatch() szuka dopasowania na całym wzorcu "opis", zdefiniowanym przez zewnętrzną parę nawiasów. Zatrzymuje się przy pierwszym przecinku i łapie następujące:

#WzórUjęcie
1(Królestwo%s(%a+%sKrólestwo)[%w%s]+)Królestwo Chmur jest niebiańskie

Używając swojego udanego pierwszego ujęcia, iterator następnie szuka dopasowania do wzoru "królestwo", zdefiniowanego przez wewnętrzną parę nawiasów. Ten zagnieżdżony wzór po prostu łapie następujące:

#WzórUjęcie
2(%a+%sKrólestwo)Królestwo Chmur

Iterator następnie cofa się i kontynuuje wyszukiwanie pełnego napisu, łapiąc następujące:

#WzórUjęcie
3(Królestwo%s(%a+%sKrólestwo)[%w%s]+)Królestwo Lasu jest spokojne
4(%a+%sKrólestwo)Królestwo Lasu

Oprócz wszystkich powyższych, istnieje specjalny przypadek z pustym ujęciem (()). Jeśli ujęcie jest puste, to pozycja w napisie zostanie uchwycona:


local match1 = "Gdzie odbywa się uchwycenie? Kto wie!"
local match2 = "Ten napis jest dłuższy niż pierwszy. Gdzie odbywa się uchwycenie? Kto wie?!"
local pattern = "()Gdzie odbywa się uchwycenie%? Kto wie!()"
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 ujęcia mogą być zagnieżdżane jak normalne:


local places = "Królestwo Chmur jest niebiańskie, Królestwo Lasu jest spokojne."
local pattern = "Królestwo (%a+()) Królestwo jest %a+"
for kingdom, position in string.gmatch(places, pattern) do
print(kingdom, position)
end
--> Chmur 10
--> Lasu 42

Zwracane wartości są niezwykłe, ponieważ są to liczby, a nie napisy:


local match = "To jest przykład"
local pattern = "To jest an ()przykład"
local position = string.match(match, pattern)
print(typeof(position)) --> number
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.