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 = [[Helloworld!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 .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(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)) --> 123local 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 = 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) --> 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) --> 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
Perbandingan
stringdapat dibandingkan menggunakan operator <, <=, >, dan 1> >=1> y
print("Apple" < "apple") --> benarprint("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) --> Robloxprint(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:
Kelas | Represents | Contoh Pertandingan |
---|---|---|
. | Setiap karakter | 32kasGJ1%fTlk?@94 |
%a) | Sebuah huruf besar atau huruf kecil | aBcDeFgHiJkLmNoPqRsTuVwXyZ |
%l | Sebuah huruf kecil | abcdefghijklmnopqrstuvwxyz |
%u | Sebuah huruf besar | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d | Setiap digit (nomor) | 0123456789 |
%p | Setiap karakter pemecahan | !@#;.,. |
%w | Karakter alfanumerik (misalnya huruf atau angka) | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 |
%s | Sebuah 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 |
%c | Sebuah karakter khusus kontrol | |
%x: | Karakter hexadecimal | 0123456789ABCDEF |
%z | Karakter 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 harfiahlocal 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 awalprint(start1) --> pertamalocal start2 = string.match("third second first", "^first") -- Tidak cocok karena "pertama" tidak ada di awalprint(start2) --> nollocal end1 = string.match("first second third", "third$") -- Cocok karena "ketiga" ada di akhiriprint(end1) --> ketigalocal end2 = string.match("third second first", "third$") -- Tidak cocok karena "ketiga" tidak ada di akhiriprint(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 stringlocal match1 = string.match("Roblox", "^Roblox$") -- Cocok karena "Roblox" adalah seluruh string (kecocokan)print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- Tidak cocok karena "Roblox" tidak berada di awal DAN akhiriprint(match2) --> nollocal 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:
Pengukur | Makna |
---|---|
+ | 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 |
%n | Untuk 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) --> 2local 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]+") -- Mengaturprint(match1) --> halo!!!local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Tidak ditetapkanprint(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 21local key2, val2 = string.match("TwoThousand= 2000", pattern)print(key2, val2) --> Dua ribu 2000local 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) doprint(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:
bantuan | Pola | Menangkap |
---|---|---|
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:
bantuan | Pola | Menangkap |
---|---|---|
2. | :%a+%sKingdom) | Kerajaan Awan |
itteriter kemudian keluar dan terus mencari string penuh, menangkap mengikuti:
bantuan | Pola | Menangkap |
---|---|---|
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 42local 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) doprint(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