Tali

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Jenis data string adalah urutan karakter, seperti huruf, angka, dan simbol. Ini adalah jenis data untuk menyimpan kebanyakan informasi berdasar teks.

Menetapkan Tali

Untuk menyatakan variabel string, letakkan tanda kurung di sekitar karakter. Lebih umum menggunakan tanda kurung ganda ( "), tetapi tanda kurung tunggal ( >) juga bekerja. Jika Anda ingin meng包括 satu atau dua kurung dalam string Anda, menggulung string Anda di sekitar jenis lain dari kurung, atau menggunakan kurung tertindas .


local string1 = "Hello world!"
print(string1) --> Halo dunia!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Untuk mencakup kutipan tunggal dan ganda dalam satu string, atau untuk membuat baris ganda, menggunakan tanda ganda:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Halo
--> dunia!
--> Halo "dunia"!
--> Hello 'world'!

Jika perlu, Anda dapat menyebutkan beberapa kutipan di dalam satu string menggunakan jumlah tanda yang sama di kutipan awal dan akhir:


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

Menggabungkan Tali

Untuk menggabungkan string, gabungkan mereka dengan dua titik ( .. ). Menggabungkan string tidak menambahkan ruang antara mereka, jadi Anda akan perlu menyertakan ruang(s) di akhir/mulai dari string sebelumnya/berikutnya, atau menggabungkan ruang antara kedua string.


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) --> Halo dunia!
print(string3) --> Hello world!

Catat bahwa perintah print() mengambil beberapa argumen dan menggabungkannya dengan ruang, sehingga Anda dapat menggunakan , sebagai gantinya dari 1> ..1> untuk menghasilkan ruang dalam 4>Output 7>print7> .


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Helloworld!
print(hello, world .. exclamationMark) --> Halo dunia!
print(hello, world, exclamationMark) --> Hello world !

Mengubah Tali

Untuk mengubah string menjadi angka, gunakan fungsi tonumber(). Jika string tidak memiliki representasi angka, tonumber() mengembalikan nil.


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

Melarikan Diri dari Tali

Untuk melarikan diri dari deklarasi string ganda atau tunggal dan menyisipkan hampir setiap karakter, letakkan slash belakang ( \ ) sebelum karakter. Misalnya:

  • Untuk menyisipkan satu kutipan dalam string kutipan tunggal, gunakan \' .
  • Untuk menyisipkan kutipan ganda dalam string kutipan ganda, gunakan \" .

local string1 = 'Hello \'world\'!'
print(string1) --> Halo ' dunia'!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

Beberapa karakter mengikuti backslashes menghasilkan karakter khusus daripada karakter yang melarikan diri:

  • Untuk menyisipkan baris baru, gunakan \n .
  • Untuk menyisipkan tab horizontal, gunakan \t .

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

Penerjemahan Teks

Luau mendukung interpretasi string , fitur yang memungkinkan Anda menambahkan ekspresi ke string. Gunakan backticks ( ` ) untuk menyatakan string yang diedit, lalu tambahkan ekspresi ke dalam kurungan geser:


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

Meskipun variabel adalah penggunaan paling umum, Anda dapat menggunakan ekspresi apa pun, termasuk matematika:


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) --> Halo dunia, 1 kali!
print(string2) --> Halo dunia, 2 kali!
print(string3) --> Hello world a third time!

Aturan pelarian standar berlaku untuk backticks, curly brackets, dan backslashes:


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

Konversi Matematika

Jika Anda melakukan operasi matematika di string, Luau secara otomatis mengubah string menjadi angka. Jika string tidak memiliki representasi angka, itu menghasilkan kesalahan.


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

Perbandingan

stringdapat dibandingkan menggunakan operator <, <=, >, dan 1> >=1> y


print("Apple" < "apple") --> benar
print("Banana" < "apple") --> benar (B adalah sebelum a di ASCII)
print("number100" < "number20") --> true

Referensi Pola Tali

Sebuah pola string adalah kombinasi karakter yang dapat Anda gunakan dengan string.match(), string.gmatch(), dan fungsi lainnya untuk menemukan potongan, atau substring, dari string panjang.

Pertandingan Langsung

Anda dapat menggunakan pertandingan langsung dalam fungsi Luau seperti string.match() , kecuali untuk karakter sihir . Misalnya, perintah ini mencari kata Roblox dalam 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

Kelas Karakter

Kelas karakter penting untuk pencarian string yang lebih maju. Anda dapat menggunakannya untuk mencari sesuatu yang bukan khusus karakter tetapi sesuai dalam kategori yang dikenal (klas), termasuk huruf, angka, spasi, 2> pemecahan2>, dan banyak lagi.

Tabel berikut menunjukkan kelas karakter resmi untuk pola string Luau:

KelasRepresentsContoh Pertandingan
.Setiap karakter32kasGJ1%fTlk?@94
%a)Sebuah huruf besar atau huruf kecilaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lSebuah huruf kecilabcdefghijklmnopqrstuvwxyz
%uSebuah huruf besarABCDEFGHIJKLMNOPQRSTUVWXYZ
%dSetiap digit (nomor)0123456789
%pSetiap karakter pemecahan!@#;.,.
%wKarakter alfanumerik (misalnya huruf atau angka)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sSebuah karakter ruang atau putih \n \n \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r \r
%cSebuah karakter khusus kontrol
%x:Karakter hexadecimal0123456789ABCDEF
%zKarakter NULL ( \0 )

Untuk karakter kata tunggal seperti %a dan %s, huruf atas yang sesuai mewakili "berlawanan" dari kelas. kejadian, %p mewakili karakter pengguna penggunaan dan 1> %P1> mewakili semua karakter kecuali penggunaan.

Karakter Ajaib

Ada 12 "karakter ajaib" yang diberikan untuk tujuan khusus dalam pola:

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

Anda dapat melarikan diri dan mencari karakter sihir menggunakan simbol %. Misalnya, untuk mencari roblox.com , larikan diri dari simbol . (periode) dengan menambahkan 1> %1> seperti dalam 4> %4> .


-- “roblox.com” cocok dengan “roblox#com” karena periode dianggap sebagai “karakter apa pun”
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Kabur dari periode dengan % sehingga itu dianggap sebagai karakter periode harfiah
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Pelat

Anda dapat mencari pola di awal atau akhir string dengan menggunakan simbol ^ dan $.


local start1 = string.match("first second third", "^first") -- Cocok karena "pertama" ada di awal
print(start1) --> pertama
local start2 = string.match("third second first", "^first") -- Tidak cocok karena "pertama" tidak ada di awal
print(start2) --> nol
local end1 = string.match("first second third", "third$") -- Cocok karena "ketiga" ada di akhiri
print(end1) --> ketiga
local end2 = string.match("third second first", "third$") -- Tidak cocok karena "ketiga" tidak ada di akhiri
print(end2) --> nil

Anda juga dapat menggunakan kombinasi ^ dan $ bersama-sama untuk memastikan pola hanya cocok dengan seluruh string dan bukan hanya beberapa bagian darinya.


-- Menggunakan kedua ^ dan $ untuk mencocokkan di seluruh string
local match1 = string.match("Roblox", "^Roblox$") -- Cocok karena "Roblox" adalah seluruh string (kecocokan)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Tidak cocok karena "Roblox" tidak berada di awal DAN akhiri
print(match2) --> nol
local match3 = string.match("I play Roblox", "Roblox") -- Cocok karena "Roblox" terkandung dalam "Saya bermain Roblox"
print(match3) --> Roblox

Modifikasi Kelas

Secara default, kelas karakter hanya cocok dengan satu karakter satu karakter dalam string. kejadian, pola berikut ( %) memulai membaca string dari kiri ke kanan, menemukan digit pertama ( 1> 21> ) dan berhenti.


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

Anda dapat menggunakan modifier dengan kelas karakter apa pun untuk mengontrol hasilnya:

PengukurMakna
+Cocok 1 atau lebih dari kelas karakter sebelumnya
-Cocok dengan setidaknya beberapa karakter sebelumnya
*Cocok 0 atau lebih dari kelas karakter sebelumnya
?Cocok 1 atau kurang dari kelas karakter sebelumnya
%nUntuk n antara 1 dan 9, mencocokkan substring yang sama dengan string yang ditangkap 1>n1>.
%bxy)Penangkapan yang seimbang mencocokkan x, y, dan segala sesuatu di antara (misalnya, %b() menyertakan pasangan huruf dan segala sesuatu di antara mereka)

Menambahkan modifier ke pola yang sama ( "%d+" вместо "%d"), menghasilkan 25 вместо 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

Set Kelas

Tetapkan harus digunakan ketika kelas karakter tunggal tidak dapat melakukan pekerjaan seluruh. kejadian, Anda mungkin ingin mencocokkan kedua huruf kecil ( %l ) dan dan karakter pembuka spasi ( 0> %p0> ) menggunakan pola tunggal.

Set ditentukan oleh huruf-huruf [] di sekitar mereka. Dalam contoh berikut, perhatikan perbedaan antara menggunakan set ( "[%l%p]+" ) dan tidak menggunakan set ( "%l%p+").


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Mengatur
print(match1) --> halo!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Tidak ditetapkan
print(match2) --> o!!!

Perintah pertama (atur) memberi tahu Luau untuk menemukan kedua karakter bawah dan pemisahan. Dengan + pengukur pengganda ditambahkan setelah seluruh atur, itu menemukan semua dari karakter tersebut ( ello!!! , berhenti ketika mencapai ruang.

Dalam perintah kedua (tidak teratur), + pengganda hanya berlaku pada kelas %p sebelumnya, jadi Luau hanya mengambil karakter bawah case pertama ( o ) sebelum seri pemecahan ( 2>!!!2> ).

Seperti Kelaskarakter, set dapat menjadi "oposisi" dari diri mereka sendiri. Ini dilakukan dengan menambahkan karakter ^ di awal atur, langsung setelah pembukaan [. kejadian, "[%p%s]+" mewakili kedua titik pem

Mendukung juga rentang yang memungkinkan Anda menemukan seluruh rentang pertandingan antara karakter awal dan akhir. Ini adalah fitur maju yang diuraikan lebih lanjut dalam lebih banyak rincian di Manual Lua 5.1 .

Menangkap Tali

String menangkap adalah sub-pola dalam pola. Ini ditutup dalam huruf () dan digunakan untuk mengambil (menangkap) substring yang cocok dan menyimpan mereka ke variabel. Misalnya, pola berikut berisi dua captures, (%a+) dan 1> percentd+1>, yang kembali dua substring set


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

Dalam pola sebelumnya, ? kuantifier yang mengikuti kedua kelas %s adalah tambahan yang aman karena membuat ruang di kedua sisi tanda = . Itu berarti pertandingan berhasil jika satu (atau kedua) ruang hilang di sekitar tanda sama.

Capturing string juga dapat dimiringkan seperti contoh berikut:


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
--> Cloud Kingdom adalah surga
--> Kerajaan Awan
--> Hutan Kerajaan damai
--> Forest Kingdom

Pencarian pola ini bekerja sebagai berikut:

Pertimbangan Library.string.gmatch() ” mencari kesesuaian pada seluruh pola " deskripsi " yang ditentukan oleh pasangan orang tua luar. Ini berhenti di koma pertama dan menangkap mengikuti:

bantuanPolaMenangkap
1.(The%s:%a+%sKingdom) [%w%s+]Kerajaan Awan adalah surga

Menggunakan ambilpertama yang sukses, iterator kemudian mencari pertandingan pada pola "kingdom" yang ditentukan oleh pasangan orang tua di dalam. Pola ini bergantung hanya menangkap mengikuti:

bantuanPolaMenangkap
2.:%a+%sKingdom)Kerajaan Awan

itteriter kemudian keluar dan terus mencari string penuh, menangkap mengikuti:

bantuanPolaMenangkap
3.(The%s:%a+%sKingdom) [%w%s+]Kerajaan Hutan damai
4:%a+%sKingdom)Kerajaan Hutan

Selain semua yang di atas, ada kasus khusus dengan tangkapan kosong ( () ). Jika tangkapan adalah kosong, maka posisi dalam string akan diambil:


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

Penangkapan khusus ini dapat diletakkan seperti yang normal:


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

Nilai yang dikembalikan tidak biasa karena mereka adalah angka bukan string:


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