Dize

*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 tipi, harfler, sayılar ve semboller gibi karakterlerin bir dizisidir. Çoğu metin tabanlı bilgiyi depolamak için kullanılan veri tipidir.

Dize Tanımlama

Bir dize değişkeni tanımlamak için, karakterlerin etrafına tırnak işareti koyun. Genelde çift tırnak (") kullanmak daha yaygındır, ancak tek tırnaklar da (') işe yarar. Dizenizde bir tek veya çift tırnak dahil etmek istiyorsanız, dizeyi diğer tür tırnak ile kaplayın ya da bir kaçış tırnağı kullanın.


local dize1 = "Merhaba dünya!"
print(dize1) --> Merhaba dünya!
local dize2 = 'Merhaba "dünya"!'
print(dize2) --> Merhaba "dünya"!

Hem tek hem de çift tırnakları bir dizeye dahil etmek veya çok satırlı dizeler oluşturmak için çift parantez kullanın:


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

Gerekirse, dize içinde, hem başlangıç hem de bitiş parantezlerinde aynı sayıda eşit işareti kullanarak birden fazla parantezi iç içe geçirebilirsiniz:


local dize1 = [=[Merhaba
[[dünya!]]
]=]
print(dize1)
--> Merhaba
--> [[dünya!]]

Dizeleri Birleştirme

Dizeleri birleştirmek için, birleştirme (..) kullanın. Dizeleri birleştirirken aralarına boşluk eklenmez, bu yüzden önceki veya sonraki dizeye boşluk(lar) dahil etmeniz veya iki dize arasında bir boşluk birleştirmeniz gerekecektir.


local merhaba = "Merhaba"
local merhabaBosluk = "Merhaba "
local dunya = "dünya!"
local dize1 = merhaba .. dunya
local dize2 = merhabaBosluk .. dunya
local dize3 = merhaba .. " " .. dunya
print(dize1) --> Merhabadünya!
print(dize2) --> Merhaba dünya!
print(dize3) --> Merhaba dünya!

print() komutunun birden fazla argüman alıp bunları boşluklarla birleştirdiğini unutmayın, bu yüzden print() çıktılarında boşluklar için .. yerine , kullanabilirsiniz.


local merhaba = "Merhaba"
local dunya = "dünya"
local unlem = "!"
print(merhaba .. dunya .. unlem) --> Merhabadünya!
print(merhaba, dunya .. unlem) --> Merhaba dünya!
print(merhaba, dunya, unlem) --> Merhaba dünya !

Dizeleri Dönüştürme

Bir diziyi bir sayıya dönüştürmek için, tonumber() fonksiyonunu kullanın. Eğer dize bir sayılı temsili yoksa, tonumber() nil döner.


local sayisalDize = "123"
print(tonumber(sayisalDize)) --> 123
local alfanumerikDize = "Merhaba123"
print(tonumber(alfanumerikDize)) --> nil

Dizeleri Kaçırma

Çift veya tek tırnak dize açıklamasını kaçırmak ve hemen hemen her karakteri gömmeden kullanmak için, karakterin önüne bir ters eğik çizgi (\) koyun. Örneğin:

  • Tek tırnak içindeki bir tek tırnağı gömmek için \' kullanın.
  • Çift tırnak içindeki bir çift tırnağı gömmek için \" kullanın.

local dize1 = 'Merhaba \'dünya\'!'
print(dize1) --> Merhaba 'dünya'!
local dize2 = "Merhaba \"dünya\"!"
print(dize2) --> Merhaba "dünya"!

Ters eğik çizgilerden sonra gelen belirli karakterler kaçış karakterleri yerine özel karakterler üretir:

  • Yeni satır eklemek için \n kullanın.
  • Yatay sekme eklemek için \t kullanın.

local dize1 = "Merhaba\n dünya!"
print(dize1)
--> Merhaba
--> dünya!
local dize2 = "Merhaba\t dünya!"
print(dize2) --> Merhaba dünya!

Dize Yerleştirme

Luau dize yerleştirmeyi destekler, bu özellik size ifadeleri dizelere yerleştirme imkanı tanır. Yerleştirme dizesi oluşturmak için geri tırnak işareti (`) kullanın, ardından ifadeleri süslü parantezler içinde ekleyin:


local dünya = "dünya"
local dize1 = `Merhaba {dünya}!`
print(dize1) --> Merhaba dünya!

Değişkenlerin en yaygın kullanımıdır, ancak matematik de dahil olmak üzere her ifade kullanılabilir:


local dünya = "dünya"
local sayı = 1
local harfler = {"w", "o", "r", "l", "d"}
local dize1 = `Merhaba {dünya}, {sayı} kez!`
local dize2 = `Merhaba {dünya}, {sayı + 1} kez!`
local dize3 = `Merhaba {table.concat(harfler)} üçüncü kez!`
print(dize1) --> Merhaba dünya, 1 kez!
print(dize2) --> Merhaba dünya, 2 kez!
print(dize3) --> Merhaba dünya üçüncü kez!

Geri tırnaklar, süslü parantezler ve ters eğik çizgiler için standart kaçış kuralları geçerlidir:


local dize1 = `Merhaba \`\{dünya\}\`!`
print(dize1) --> Merhaba `{dünya}`!

Matematik Dönüşümü

Bir dizge üzerinde matematik işlemleri gerçekleştirdiğinizde, Luau otomatik olarak dizgeyi bir sayıya dönüştürür. Eğer dizge sayılı bir temsile sahip değilse, bir hata verir.


print("55" + 10) --> 65
print("55" - 10) --> 45
print("55" * 10) --> 550
print("55" / 10) --> 5.5
print("55" % 10) --> 5
print("Merhaba" + 10) --> print("Merhaba" + 10):1: dizge ve sayı üzerinde aritmetik (toplama) gerçekleştirme girişimi

Karşılaştırmalar

Dizgeler <, <=, >, ve >= operatörleri kullanılarak karşılaştırılabilir, bu operatörler dizgedeki her karakterin ASCII kodlarına dayanarak leksikografik sıraya göre karşılaştırma yapar. Bu, dizgede olan sayıları doğru şekilde karşılaştırmayacağı anlamına gelir; örneğin, "100" ifadesi "20" ifadesinden daha küçük olacak çünkü "0" ve "1" baytlarının ASCII kodları bayt "2" den daha düşüktür.


print("Elma" < "elma") --> true
print("Muz" < "elma") --> true (B, ASCII'de a'dan önce gelir)
print("sayı100" < "sayı20") --> true

Dize Deseni Referansı

Bir dize deseni, string.match(), string.gmatch() ve diğer fonksiyonlarla kullanılabilen bir karakter kombinasyonudur, bu da daha uzun bir dizenin parçasını veya alt dizesini bulmanıza yardımcı olur.

Doğrudan Eşleşmeler

Doğrudan eşleşmeleri, string.match() gibi bir Luau fonksiyonunda kullanabilirsiniz, ancak büyüleyici karakterler hariçtir. Örneğin, bu komutlar bir dizedeki Roblox kelimesini arar:


local eşleşme1 = string.match("Roblox'a hoş geldiniz!", "Roblox")
local eşleşme2 = string.match("Harika oyunumda hoş geldiniz!", "Roblox")
print(eşleşme1) --> Roblox
print(eşleşme2) --> nil

Karakter Sınıfları

Karakter sınıfları, daha ileri düzey dize aramaları için gereklidir. Bunları, belirli karakterlere özel olmayan, ancak bilinen bir kategori (sınıf) içinde olan şeyleri aramak için kullanabilirsiniz; buna harfler, rakamsal karakterler, boşluklar, noktalama işaretleri ve daha fazlası dahildir.

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

SınıfTemsil EderÖrnek Eşleşme
.Herhangi bir karakter32kasGJ1%fTlk?@94
%aBüyük veya küçük harfaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lKüçük harfabcdefghijklmnopqrstuvwxyz
%uBüyük harfABCDEFGHIJKLMNOPQRSTUVWXYZ
%dHerhangi bir rakam (sayı)0123456789
%pHerhangi bir noktalama karakteri!@#;,.
%wAlfanümerik karakter (ya bir harf ya da bir rakam)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sBir boşluk veya boşluk karakteri , \n ve \r
%cÖzel kontrol karakteri
%xBir onaltılık karakter0123456789ABCDEF
%zNULL karakteri (\0)

Tek harflerden oluşan karakter sınıfları (%a ve %s gibi), karşılık gelen büyük harf, sınıfın "tersini" temsil eder. Örneğin, %p noktalama karakterini temsil ederken, %P noktalamalar hariç tüm karakterleri temsil eder.

Büyüleyici Karakterler

Desenlerde özel amaçlar için rezerve edilen 12 "büyüleyici karakter" vardır:

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

Büyüleyici karakterleri % sembolü ile kaçırabilir ve arama yapabilirsiniz. Örneğin, roblox.com için arama yaparken, . (nokta) sembolünü, % ile öncelik vererek kaçırın, örneğin %..


-- "roblox.com" ifadesi "roblox#com" ile eşleşir çünkü nokta "herhangi bir karakter" olarak yorumlanır
local eşleşme1 = string.match("roblox#com nedir?", "roblox.com")
print(eşleşme1) --> roblox#com
-- Noktayı % ile kaçıralım, böylece nokta harflerden oluşmuş bir karakter olarak yorumlansın
local eşleşme2 = string.match("Ben roblox.com'u seviyorum!", "roblox%.com")
print(eşleşme2) --> roblox.com

Ankrajlar

Bir dizenin başında veya sonunda bir deseni aramak için ^ ve $ sembollerini kullanabilirsiniz.


local başlangıç1 = string.match("birinci ikinci üçüncü", "^birinci") -- Eşleşir çünkü "birinci" başlangıçta
print(başlangıç1) --> birinci
local başlangıç2 = string.match("üçüncü ikinci birinci", "^birinci") -- Eşleşmez çünkü "birinci" başlangıçta değil
print(başlangıç2) --> nil
local bitiş1 = string.match("birinci ikinci üçüncü", "üçüncü$") -- Eşleşir çünkü "üçüncü" sonunda
print(bitiş1) --> üçüncü
local bitiş2 = string.match("üçüncü ikinci birinci", "üçüncü$") -- Eşleşmez çünkü "üçüncü" sonunda değil
print(bitiş2) --> nil

Bir dizenin yalnızca tam eşleşmesini sağlamak için ^ ve $ sembollerini birlikte kullanabilirsiniz.


-- Tüm bir dizge üzerinde eşleşmek için hem ^ hem de $ kullanma
local eşleşme1 = string.match("Roblox", "^Roblox$") -- Eşleşir çünkü "Roblox" tam dizedir (eşitlik)
print(eşleşme1) --> Roblox
local eşleşme2 = string.match("Ben Roblox oynuyorum", "^Roblox$") -- Eşleşmez çünkü "Roblox" ne başlangıçta NE de sonunda
print(eşleşme2) --> nil
local eşleşme3 = string.match("Ben Roblox oynuyorum", "Roblox") -- Eşleşir çünkü "Roblox", "Ben Roblox oynuyorum" içinde bulunur
print(eşleşme3) --> Roblox

Sınıf Modifikatörleri

Kendiliğinden, bir karakter sınıfı bir dizgede yalnızca bir karakteri eşleştirir. Örneğin, aşağıdaki desen ("%d") dizgeyi soldan sağa okuyarak ilk rakamı (2) bulur ve durur.


local eşleşme = string.match("Bulut Krallığında 25 güç mücevheri var", "%d")
print(eşleşme) --> 2

Herhangi bir karakter sınıfı ile modifikatörler kullanarak sonucu kontrol edebilirsiniz:

Nicelik BelirleyiciAnlamı
+Önceki karakter sınıfından 1 veya daha fazlasını eşleştir
-Önceki karakter sınıfından mümkün olduğunca azını eşleştir
*Önceki karakter sınıfından 0 veya daha fazlasını eşleştir
?Önceki karakter sınıfından 1 veya daha azını eşleştir
%nn 1 ile 9 arasında ise, n'inci yakalanan dizeye eşit bir alt dizeyi eşleştir.
%bxyDengeli eşleşme x, y ve aralarındaki her şeyi eşleştirir (örneğin, %b() bir çift parantez ve aralarındaki her şeyi eşleştirir)

Aynı desene bir modifikatör eklemek ("%d+" yerine "%d"), 2 yerine 25 çıktısı verir:


local eşleşme1 = string.match("Bulut Krallığında 25 güç mücevheri var", "%d")
print(eşleşme1) --> 2
local eşleşme2 = string.match("Bulut Krallığında 25 güç mücevheri var", "%d+")
print(eşleşme2) --> 25

Sınıf Setleri

Setler, tek bir karakter sınıfının tüm işi yapamayacağı durumlarda kullanılmalıdır. Örneğin, hem küçük harfleri (%l) hem de noktalama karakterlerini (%p) karşılaştırmak isteyebilirsiniz.

Setler, etraflarında köşeli parantezler [] ile tanımlanır. Aşağıdaki örnekte, bir set kullanmanın ("[%l%p]+") ve kullanmadığınızda ("%l%p+") ne gibi farklar yarattığını görebilirsiniz.


local eşleşme1 = string.match("Merhaba!!! Başka bir diziyim.", "[%l%p]+") -- Set
print(eşleşme1) --> erhaba!!!
local eşleşme2 = string.match("Merhaba!!! Başka bir diziyim.", "%l%p+") -- Set değil
print(eşleşme2) --> e!!!

İlk komut (set), Luau'ya hem küçük harf karakterlerini hem de noktalama işaretlerini bulmasını söyler. Tüm setin arkasında bulunan + nicelik belirleyicisi ile birlikte tüm bu karakterleri (erhaba!!!) bulur.

İkinci komut (set olmayan), + nicelik belirleyici yalnızca önündeki %p sınıfına uygulanır, dolayısıyla Luau sadece ilk küçük harf karakterini (e) alır ve ardından gelen noktalama işaretleriyle (!!!) durur.

Karakter sınıflarında olduğu gibi, setler de kendilerinin "tersi" olabilir. Bunun için, setin başlangıcının hemen ardından ^ karakterini ekleyerek bunu yapabilirsiniz. Örneğin, "[%p%s]+" hem noktalama işaretlerini hem de boşlukları temsil ederken, "[^%p%s]+" ise noktalama işaretleri ve boşluklar hariç tüm karakterleri temsil eder.

Setler ayrıca, başlangıç ve bitiş karakteri arasında tüm eşleşmeleri bulmanızı sağlayan aralıkları destekler. Bu gelişmiş özellikler hakkında daha fazla bilgi edinebilirsiniz: Lua 5.1 Kılavuzu.

Dize Yakalamaları

Dizelerdeki yakalamalar, bir desen içindeki alt desenlerdir. Bunlar () içinde yer alır ve eşleşen alt dizeleri almak ve bunları değişkenlere kaydetmek için kullanılır. Örneğin, aşağıdaki desende iki yakalama bulunmaktadır, (%a+) ve (%d+), bunlar başarılı bir eşleşme durumunda iki alt dize döndürür.


local dize_desen = "(%a+)%s?=%s?(%d+)"
local anahtar1, deger1 = string.match("YirmiBir = 21", dize_desen)
print(anahtar1, deger1) --> YirmiBir 21
local anahtar2, deger2 = string.match("İkiBin= 2000", dize_desen)
print(anahtar2, deger2) --> İkiBin 2000
local anahtar3, deger3 = string.match("BirMilyon=1000000", dize_desen)
print(anahtar3, deger3) --> BirMilyon 1000000

? nicelik belirleyicisi, her iki %s sınıfının ardından geliyor, bu güvenli bir ektir çünkü = işaretinin etrafındaki boşluğu isteğe bağlı hale getirir. Yani, eşleşme başarılı olur eğer eşit işaretinin etrafında bir (veya her iki) boşluk eksikse.

string.gsub() fonksiyonunda, %1, %2, %3 vb. kullanarak değişim dizesinde yakalama gruplarını dahil edebilirsiniz, Luau toplamda 32 yakalama grubunu desteklese de, bu söz dizimiyle yalnızca ilk dokuzunu referans alabilirsiniz:


local dize = "aşk2oyuncak Roblox"
local dize_desen = "(%w+)(%d+)(%w+)%s+(%w+)"
local değiştir = "Ben %1 %2 %3 %4!"
local sonuç = string.gsub(dize, dize_desen, değiştir)
print(sonuç) --> Ben aşk 2 oyuncak Roblox!

Ayrıca dize yakalamalarını iç içe geçirebilirsiniz:


local mekanlar = "Bulut Krallığı cennet, Orman Krallığı huzurlu"
local dize_desen = "(Bulut%s(%a+%sKrallığı)[%w%s]+)"
for tanım, krallık in string.gmatch(mekanlar, dize_desen) do
print(tanım)
print(krallık)
end
--> Bulut Krallığı cennet
--> Bulut Krallığı
--> Orman Krallığı huzurlu
--> Orman Krallığı

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

string.gmatch() yineleyicisi, dış parantez çiftinin tanımladığı "tanım" desenine bir eşleşme arar. Bu, ilk virgüle kadar durur ve şunları yakalar:

#DesenYakaladı
1(Bulut%s(%a+%sKrallığı)[%w%s]+)Bulut Krallığı cennet

Başarılı ilk yakalayışı ile birlikte, yineleyici "krallık" deseninde bir eşleşme aramak için geri döner. Bu iç desen sadece şunu yakalar:

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

Daha sonra, yineleyici geri çekilir ve tam dizeyi aramaya devam eder, şu şekilde yakalar:

#DesenYakaladı
3(Bulut%s(%a+%sKrallığı)[%w%s]+)Orman Krallığı huzurlu
4(%a+%sKrallığı)Orman Krallığı

Tüm yukarıdaki özelliklerin yanı sıra, boş bir yakalama (()) ile ilgili özel bir durum vardır. Eğer bir yakalama boşsa, o zaman dizgedeki pozisyon yakalanır:


local eşleşme1 = "Eşleşme nerede oluyor? Kim bilir!"
local eşleşme2 = "Bu dize, ilkinden daha uzun. Eşleşme nerede oluyor? Kim bilir?!"
local dize_desen = "()Eşleşme nerede oluyor%? Kim bilir!()"
local başlangıç1, bitiş1 = string.match(eşleşme1, dize_desen)
print(başlangıç1, bitiş1) --> 1 42
local başlangıç2, bitiş2 = string.match(eşleşme2, dize_desen)
print(başlangıç2, bitiş2) --> 43 84

Bu özel yakalamalar normal yakalamalar gibi iç içe geçebilir:


local mekanlar = "Bulut Krallığı cennet, Orman Krallığı huzurlu."
local dize_desen = "Bulut (%a+()) Krallığı %a+"
for krallık, pozisyon in string.gmatch(mekanlar, dize_desen) do
print(krallık, pozisyon)
end
--> Bulut 10
--> Orman 42

Dönen değerler, string yerine sayı olarak sonuçlanır:


local eşleşme = "Bu bir örnek"
local dize_desen = "Bu bir ()örnek"
local pozisyon = string.match(eşleşme, dize_desen)
print(typeof(pozisyon)) --> sayı
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.