Dizeeler

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

dize veri türü, harfler, sayılar ve semboller gibi bir karakter dizisidir.En çok metne dayalı bilgi depolamak için veri türüdür.

Dize ilan et

Bir dize değişkenini ilan etmek için, karakterlerin etrafına tırnak işareti koyun.Çift tırnakları kullanmak daha yaygındır ( " ), ancak tek tırnaklar da çalışır ( ' ).Dizeye tek veya çift tırnak içermek istiyorsanız, dizeyi diğer türde bir alıntıya sarın veya kaçırılmış bir alıntı kullanın.


local string1 = "Hello world!"
print(string1) --> Merhaba dünya!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Bir dizihem tek hem de çift tırnakları dahil etmek veya çok satırlı dize oluşturmak için, onları çift parantezler kullanarak ilan edin:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Merhaba
--> dünya!
--> Merhaba "dünya"!
--> Hello 'world'!

Gerekirse, başlangıç ve bitiş parantezlerinde aynı sayıda eşit işaret kullanarak bir dize içinde çok sayıda parantez yerleştirebilirsiniz:


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

Dizeleri birleştir

Dizeleri birleştirmek için, bunları iki nokta ile birleştirin ( .. ).Metinleri birleştirmek aralarına bir boşluk eklemiyor, bu yüzden önceki/sonraki bir dize veya iki diziarasında bir boşluk eklemelisiniz veya iki metin arasında bir boşluk birleştirmelisiniz.


local hello = "Hello"
local helloWithSpace = "Hello "
local world = "world!"
local string1 = hello .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(string1) --> Merhaba dünya!
print(string2) --> Merhaba dünya!
print(string3) --> Hello world!

komutasının çok sayıda argüman aldığını ve bunları ile birleştirdiğini unutmayın, böylece yerine boşlukları üretmek için yerine kullanabilirsiniz.


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Merhaba dünya!
print(hello, world .. exclamationMark) --> Merhaba dünya!
print(hello, world, exclamationMark) --> Hello world !

Dize dönüştürme

Bir dizeyi bir sayıya dönüştürmek için, tonumber() fonksiyonunu kullanın. Eğer dize bir sayı temsiline sahip değilse, tonumber() döndürür nil .


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

Dize kaçışları

Çift veya tek özel karakter içeren bir dize ifadesinden kaçınmak ve hemen hemen her karakteri içine yerleştirmek için, karakterin önüne bir tersbölü ( \ ) koyun.Örneğin:

  • Tek bir alıntıyı tek bir diziiçinde yerleştirmek için, \' kullanın.
  • Bir çift alıntıyı çift alıntı içinde yerleştirmek için, \" kullanın.

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

Geri tersleri takip eden bazı karakterler kaçmış karakterler yerine özel karakterler üretir:

  • Yeni bir satırı yerleştirmek için, \n kullanın.
  • Dikey bir sekme yerleştirmek için, \t kullanın.

local string1 = "Hello\nworld!"
print(string1)
--> Merhaba
--> dünya!
local string2 = "Hello\tworld!"
print(string2) --> Hello world!

Dize interpolasyonu

Luau, ip ifadesi yerleştirme özelliğini destekler, bir özellik sayesinde ifadeleri süzgeçlere yerleştirebilirsiniz.Bir karışık dize ilan etmek için geri tırnakları kullanın ( ` ), ardından kıvrık parantezler içine ifadeler ekleyin:


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

Değişkenler en yaygın kullanım olmasına rağmen, matematik de dahil olmak üzere herhangi bir ifade kullanabilirsiniz:


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) --> Merhaba dünya, 1 kez!
print(string2) --> Merhaba dünya, 2 kez!
print(string3) --> Hello world a third time!

Standart kaçış kuralları geri tıklamalar, kavisli parantezler ve geri tersler için geçerlidir:


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

Matematik dönüşümü

Bir diziüzerinde matematik işlemleri yaparsanız, Luau otomatik olarak dizeyi bir sayıya dönüştürür.Dize bir sayı temsiline sahip değilse, bir hata oluşur.


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

Karşılıklar

Dize karşılaştırmak için < , <= , > ve >= operatörlerini kullanarak, bir dize içindeki her bir karakterin ASCII kodlarına dayalı leksikal düzenle göre karşılaştırılabilir.Bu, örneğin, 'in düzgün karşılaştırılmadığı sayılara yol açar, çünkü baytlar ve daha düşük ASCII kodlarına sahiptir, çünkü bayt 'dan daha düşüktür.


print("Apple" < "apple") --> doğru
print("Banana" < "apple") --> true (B, ASCII'de birden önce)
print("number100" < "number20") --> true

Dize model referansı

Bir dize modeli , , ve başka işlevlerle bir parçayı veya daha uzun bir diziparçasını bulmak için kullanabileceğiniz karakterlerin bir kombinasyonudur.

Doğrudan eşleşmeler

Luau işlevinde doğrudan eşleşmeleri kullanabilirsiniz, string.match() hariç sihirli karakterler .Örneğin, bu komutlar bir diziiçinde Roblox kelimesini arar:


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

Karakter sınıfları

Karakter sınıfları daha gelişmiş dize aramaları için gereklidir.Bunları kullanarak, harfler , sayılar , boşluklar , noktalama işaretleri ve daha fazlası dahil olmak üzere karakter spesifik olmayan ve bilinen bir kategori içinde yer alan bir şey arayabilirsiniz.

Aşağıdaki tablo, Luau dize desenleri için resmi karakter sınıflarını gösterir:

SınıfTemsil ederÖrnek Maçı
.Herhangi bir karakter%32kasGJ1%fTlk?@94
%aBüyük veya küçük harf bir mektupabcdefghijklmnopqrsztuvwxyz
%lKüçük harf bir mektupabcdefghijklmnopqrstuvwxyz
%uBüyük harf bir mektupABCDEFGHIJKLMNOPQRSTUVWXYZ
%dHerhangi bir sayı (number)0123456789
%pHerhangi bir noktalama karakteri!@#;,.
%wAlfanumerik bir karakter (harf veya bir sayı)abcdefghijklmnopqrsztuvwxyz0123456789
%sBir boşluk veya boşluk karakteri , \n ve \r
%cÖzel bir kontrol karakteri
%xAltıgen bir karakter0123456789ABCDEF
%zNULL karakteri ( \0 )

%a ve %s gibi tek harfli karakter sınıfları için, eşdeğer büyük harf, sınıfın "karşıtını" temsil eder.durum, %p bir virgül karakterini temsil ederken, %P tüm karakterleri virgül dışında temsil eder.

Büyülü karakterler

Desenlerde özel amaçlar için ayırılan 12 "büyülü karakter" vardır:

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

% sembolünü kullanarak sihirli karakterlerden kaçabilir ve arayabilirsiniz.Örneğin, roblox.com aramak için, önce bunu bir (nokta) sembolü ile çevirerek önceki (nokta) sembolünden kaçının.


-- roblox.com "roblox#com" eşleşir çünkü periyot "herhangi bir karakter" olarak yorumlanır
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Yüzde ile süreyi kaçırarak, böylece süre bir kelime süre karakteri olarak yorumlanır
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Kancalar

Bir dize başında veya sonunda bir model arayabilirsiniz ^ ve $ sembolleri kullanarak.


local start1 = string.match("first second third", "^first") -- Çünkü "ilk" başlangıçta olduğundan maçlar eşleşir
print(start1) --> ilk
local start2 = string.match("third second first", "^first") -- Eşleşmiyor çünkü "ilk" başlangıçta değil
print(start2) --> nulsüz
local end1 = string.match("first second third", "third$") -- bitir"üçüncü" olduğundan eşleşir
print(end1) --> üçüncü
local end2 = string.match("third second first", "third$") -- Eşleşmiyor çünkü "üçüncü" bitirdeğil
print(end2) --> nil

Ayrıca, bir modelin sadece bütün diziyi değil, sadece bir kısmını değil garanti etmek için hem ^ hem de $ birlikte kullanabilirsiniz.


-- Tam bir diziboyunca eşleşmek için hem ^ hem de $'yi kullanmak
local match1 = string.match("Roblox", "^Roblox$") -- Çünkü "Roblox" bütün dize olduğu için eşitlik nedeniyle eşleşir
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Eşleşmiyor çünkü "Roblox" başlangıçta VE bitirdeğil
print(match2) --> nulsüz
local match3 = string.match("I play Roblox", "Roblox") -- Eşleşir çünkü "Roblox" "I play Roblox" içinde bulunur
print(match3) --> Roblox

Sınıf modifiye ediciler

Kendi başına, bir karakter sınıfı yalnızca bir diziiçinde bir karaktere eşleşir.durum, aşağıdaki model ( "%d" ) dizeyi soldan sağa okumaya başlar, ilk sayıyı bulur ( 2 ), ve durur.


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

sonuçkontrol etmek için herhangi bir karakter sınıfıyla modifiye edici kullanabilirsiniz:

SayıcıAnlamı
+Önceki karakter sınıfından 1 veya daha fazlası eşleştir
-Önceki karakter sınıfının en azından bir kısmıyla eşleşin olabildiğince
*Önceki karakter sınıfından 0 veya daha fazlası eşleştir
?Önceki karakter sınıfından 1 veya daha az eşleştirin
%nFor n arasında 1 ve 9 arasında, yakalanan diziile eşit bir alt dizge bulur n.
%bxyDengeli yakalama eşleşmesi x , y ve aralarındaki her şey (örneğin, %b() bir parantez çifti ve aralarındaki her şeyi eşleştirir)

Aynı desene bir modifiye eklemek ( "%d+" yerine "%d" ), çıktı 25 yerine 2 :


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

Sınıf setleri

Setler tek bir karakter sınıfı tüm işi yapamadığında kullanılmalıdır.durum, hem küçük harfleri ( %l ) ve noktalama karakterlerini ( %p ) tek bir model kullanarak eşleştirmek isteyebilirsiniz.

Setler etraflarındaki parantezler tarafından tanımlanır [] .Aşağıdaki örnekte, bir set kullanımındaki farkı ( ) ve bir set kullanımındaki farkı ( ) gözlemleyin.


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Ayarlandı
print(match1) --> merhaba!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Ayarılmamış
print(match2) --> o!!!

İlk komut (ayarla) Luau'ya hem küçük harfli karakterleri hem de noktalama işaretlerini bulmasını söyler.Tüm ayarlasonra eklenen sayıcı ile, bu karakterlerin tümünü bulur ( ), uzaya ulaştığında durur

İkinci komut (ayarlanmamış)da, + sayıcı yalnızca öncesindeki %p sınıfına uygulanır, bu yüzden Luau sadece ilk küçük harfi ( o ) seri noktalama öncesine yakalar ( !!! ).

Karakter sınıfları gibi, setler kendilerinin "zıttı" olabilir.Bunun yapılması için ayarlabaşına bir ^ karakteri eklenir, açılıştan hemen sonra [.durum, "[%p%s]+" noktalama ve boşlukları hem temsil eder, hem de "[^%p%s]+" tüm karakterleri noktalama ve boşluklar hariç temsil eder.

Setler ayrıca başlangıç ve bitiş karakterleri arasında bir dizi eşleşme bulmanıza izin veren menzilleri destekler.Bu, Lua 5.1 Kılavuzu üzerinde daha ayrıntılı olarak tanımlanan gelişmiş bir özelliktir.

Dize yakaları

Dize yakalar bir model içinde alt-kalıptır.Bunlar parantezler içinde () kapatılmıştır ve eşleşen alt dizilere ulaşmak ve değişkenlere kaydetmek için kullanılır.Örneğin, aşağıdaki model iki yakalama içerir, (%a+) ve (%d+), başarılı bir eşleşme sonucunda iki alt dizge döndürür.


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

Önceki modelde, her iki %s sınıfını takip eden ? sayıcı, çünkü = işaretinin her iki tarafındaki alanı zorunlu olmayan hale getiriyor, güvenli bir eklemektir.Bu, eşit işareti etrafında bir (veya her ikisi de) boşluk kaybolduğunda maçın başarılı olacağı anlamına gelir.

Dize yakaları ayrıca şu örnekte olduğu gibi iç içe geçmiş olabilir :


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
--> Bulut Krallığı gökseldir
--> Bulut Krallığı
--> Orman Krallığı barışçıl
--> Forest Kingdom

Bu model araması şu şekilde çalışır:

string.gmatch() döngüsü, ebeveyn parantezlerin dış tarafı tarafından tanımlanan tüm "açıklama" modelinde bir eşleşme arar.Bu ilk virgülde durur ve takip edilenyakalar:

#DesenleriKapatma
1(The%s(%a+%sKingdom)[%w%s]+)Bulut Krallığı gökseldir

Başarılı ilk yakalamasını kullanarak, döngü sonra iç parantezlerin anahtarı tarafından tanımlanan "krallık" modelinde bir eşleşme arar.Bu çember içi model basitçe takip edilenyakalar:

#DesenleriKapatma
2(%a+%sKrallık)Bulut Krallığı

Döngü sonra geri çekilir ve tüm diziyi arar, takip edilenyakalar:

#DesenleriKapatma
3(The%s(%a+%sKingdom)[%w%s]+)Orman Krallığı barışçıl
4(%a+%sKrallık)Orman Krallığı

Yukarıdakilerin tümüne ek olarak, bir boş yakalama ile özel bir durum var (()).Bir yakalama boşsa, dize üzerindeki konum yakalanacaktır:


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

Bu özel yakalamalar normal olanlara benzer şekilde yerleştirilebilir:


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

Geri döndürülen değerler, dizilere değil sayılar olmaları nedeniyle sıradışıdır:


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