string veri türü, harfler, sayılar ve semboller gibi karakterlerin bir dizi olarak ifade edilmesidir. Bu, çoğu metin tabanlı bilginin depolanması için veri türüdür.
Kaynakları Deklarasyon
Bir yol değiştiriciyi ilan etmek için, karakterlerin etrafına virgüller yazın. Çift virgüller kullanmak daha yaygındır ("), ancak tek virgüller kullanmak da mümkündür. Eğer yolunuzda bir virgül veya kaçır virgül kullanmak istiyorsanız, yolunuzu diğer türdeki bir virgül veya kaçır vir
local string1 = "Hello world!"print(string1) --> Merhaba dünya!local string2 = 'Hello "world"!'print(string2) --> Hello "world"!
Çift tırnakları kullanarak tek ve çift sözcükleri bir yüzeyde dahil etmek veya çok satır sözcükleri oluşturmak için aşağıdaki kutucukları kullanın:
local string1 = [[Helloworld!Hello "world"!Hello 'world'!]]print(string1)--> Merhaba--> dünya!--> Merhaba "dünya"!--> Hello 'world'!
Gerekirse, aynı işaretlerin her başlangıç ve bitiş kutusunda aynı sayıda katlanabilir küreler kullanarak bir dizi içine katlayabilirsiniz:
local string1 = [=[Hello[[world!]]]=]print(string1)--> Merhaba--> [[world!]]
İpeleri Birleştirme
Kaynakları birleştirmek için, onları iki nokta ile birleştir onları. Concatenating kaynaklar arasında bir boşluk girmez, bu yüzden önceki/sonraki bir dizibaşlangıcında/sonunda boşluk(lar) gerekir veya kaynakların arasında bir boşluk girmezsiniz.
local hello = "Hello"local helloWithSpace = "Hello "local world = "world!"local string1 = hello .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(string1) --> Helloworld!print(string2) --> Merhaba dünya!print(string3) --> Hello world!
Not: print() komutunun birden fazla argümanı vardır ve onları ile boşlukları birleştirir, böylece , yerine1>..1> çıktılarında alanları yazabilirsiniz.
local hello = "Hello"local world = "world"local exclamationMark = "!"print(hello .. world .. exclamationMark) --> Helloworld!print(hello, world .. exclamationMark) --> Merhaba dünya!print(hello, world, exclamationMark) --> Hello world !
Konvektörleri Dönüştürme
Bir diziyi bir sayıya dönüştürmek için, tonumber() işlevini kullanın. Eğer stringin bir sayı temsiline sahip değilse, Global.LuaGlobals.tonumber()``nil ı döndürür.
local numericString = "123"print(tonumber(numericString)) --> 123local alphanumericString = "Hello123"print(tonumber(alphanumericString)) --> nil
Kısa Yollarından Kaçma
Çift veya tek kutu sözcüklerinden kaçmak ve neredeyse her karakteri yerleştirmek için karakterin önünde bir boşluk ( \ ) koyun. Örneğin:
- Tek bir alıntıyı tek alıntı dizibirleştirmek için, \' kullanın.
- Çift따옴lı diziiçine çift따옴lı ır kullanın \" .
local string1 = 'Hello \'world\'!'print(string1) --> Merhaba dünya!local string2 = "Hello \"world\"!"print(string2) --> Hello "world"!
Geri slash'ları takiben gelen bazı karakterler kaçmış karakterler değil, özel karakterler üretir:
- Yeni bir satır kaydırmak için \n kullanın.
- Yatay bir etiket gömek için \t kullanın.
local string1 = "Hello\nworld!"print(string1)--> Merhaba--> dünya!local string2 = "Hello\tworld!"print(string2) --> Hello world!
Kısayol Çevirisi
Luau, string interpolation destekler, bir özellik sayesinde ifadeleri yuvarlaklar içine girmenizi sağlar. Arka çizgileri ( ` ) kullanarak bir yuvarlak içine ifadeler ekleyin ve düzen içinde kıvrımlı parçalara 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 dahil herhangi bir ifadeyi kullanabilirsiniz:
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) --> Merhaba dünya, 1 kez!print(string2) --> Merhaba dünya, 2 kez!print(string3) --> Hello world a third time!
Backticks, curly brackets ve backslashes için standart kaçış kuralları uygulanır:
local string1 = `Hello \`\{world\}\`!`print(string1) --> Hello `{world}`!
Matematik Dönüşümü
Bir dizihesap etmek için bir yüzdeyi yüzde olarak yazarsanız, Luau yüzdesi otomatik olarak bir sayıya dönüştürür. Eğer yüzdeye bir sayı temsilinin olmadığını varsayarsanız, bir hata oluşur.
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
Karşılaştırmalar
Kıyaslama işlemi < , <= , > ve 2> >=2> işlemler
print("Apple" < "apple") --> doğruprint("Banana" < "apple") --> true (B ASCII'de önce bir)print("number100" < "number20") --> true
IP Adresiyle İlişkili Kısayol
Bir strung pattern bir karakterin string.match() , string.gmatch() ve diğer işlevleri kullanarak bir parçayı, veya daha uzun bir dizibir kısmını bulmak için diğer işlevleri bulmak için bir kombinasyonudur.
Doğrudan Maçlar
Luau'nun bir işlevindeki doğrudan eşleştirmeyi kullanabilirsiniz, büyü karakterleri dışında. Örneğin, bu komutlar bir yuva içindeki string.match() kelimesini arar.
local match1 = string.match("Welcome to Roblox!", "Roblox")local match2 = string.match("Welcome to my awesome game!", "Roblox")print(match1) --> Robloxprint(match2) --> nil
Karakter Sınıfları
Karakter sınıfları daha gelişmiş yazı aramaları için kullanışlıdır. Onları kullanarak, özellikle karakter olmayan ama bilinen bir kategori (klas) içinde aranan bir şeyi arayabilirsiniz (örneğin harfler, sayılar, boşluklar, 2> boşluklama2>, ve daha fazlası).
Aşağıdaki tabloda, Luau yapıları için resmi karakter sınıfları gösterilmiştir:
Sınıfınızın temsilini yapar. | Örnek Maçı yapar. | Rakip Maçı yapar. |
---|---|---|
. | Herhangi bir karakter | 32kasGJ1%fTlk?@94 |
%a | Bir üst veya alt harf | aBcDeFgHiJkLmNoPqRsTuVwXyZ |
%l | Bir düşük kasalı harf | abcdefghijklmnopqrstuvwxyz |
%u | Üst kasa harfesi | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d) | Herhangi bir sayı (number) | 0123456789. |
%p | Herhangi bir boşluk karakteri | !@#;.<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br |
%w | Bir alfanümerik karakter (ya bir harf veya bir sayı) | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 |
%s | Bir boşluk veya beyazluk karakteri | , \n ve \r |
%c | Özel bir kontrol karakteri | |
%x | Hexadecimal karakter | 0123456789ABCDEF |
%z | NULL karakteri ( \0 ) |
Aşağıdaki karakterlerin sınıfları, %a ve %s gibi, eşdeğer üst kasalı harfli temsil eder. durum, %p bir boşluk karakterini temsil ederken, 1> %P1> tüm karakterleri boşluk olarak temsil eder.
Büyülü Karakterler
Modellerdeki 12 "büyülü karakter" özel amaçlar için kullanılır:
$ | % | ^: | * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | () | ) |
. | [) | ] | + | - | ? |
Escape ve büyülü karakterleri aramak için % sembolünü kullanın. Örneğin, roblox.com aranıyor, önce . (nokta) sembolüyle önceki 1> %1> ile aranıyor.
-- roblox.com "roblox#com" eşleştirilir çünkü periyot "herhangi bir karakter" olarak yorumlanırlocal match1 = string.match("What is roblox#com?", "roblox.com")print(match1) --> roblox#com-- % ile bölümü kaçırın, böylece bir harf birimi olarak okunurlocal match2 = string.match("I love roblox.com!", "roblox%.com")print(match2) --> roblox.com
Çivitler
^ ve $ sembollerini kullanarak bir şeritin başlangıcında veya sonunda bir patterne arayabilirsiniz.
local start1 = string.match("first second third", "^first") -- “İlk” başlığında olduğu için eşleştirmeprint(start1) --> ilklocal start2 = string.match("third second first", "^first") -- “İlk” başlığının başlangıcında değilprint(start2) --> hiçlocal end1 = string.match("first second third", "third$") -- “Üçüncü” adı sonunda eşleştirprint(end1) --> üçüncülocal end2 = string.match("third second first", "third$") -- Uymaz çünkü "üçüncü" bitirdeğilprint(end2) --> nil
Ayrıca, hem ^ hem de $ bir kombinasyon kullanarak, bir patronun sadece tüm yazıyı değil, sadece bir kısmını değiştirdiğinden emin olabilirsiniz.
-- Tüm bir senaryoda uyumlu olmak için hem ^ hem de $ kullanıyorlocal match1 = string.match("Roblox", "^Roblox$") -- Roblox'un tüm senaryosu (eşitlik) olduğu için eşleştirmeyi kullanırprint(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- Roblox'un başlangıcı VE bitir"değil" olduğu için eşleştirilmiyorprint(match2) --> hiçlocal match3 = string.match("I play Roblox", "Roblox") -- Roblox'un "I play Roblox" içinde bulunduğu için eşleştirmeprint(match3) --> Roblox
Sınıf Modifikatörleri
Kendi başına, bir karakter sınıfı sadece bir karakteri bir karakteri bir yol boyunca eşleştirir. durum, aşağıdaki patter ( "%d" ) soldan sağa okuma başlar, ilk sayıyı bulur 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 modifikatörleri kullanabilirsiniz:
Ölçücü | Anlamı |
---|---|
+ | Önceki karakter sınıfından 1 veya daha fazla eşleştir |
- | Önceki karakter sınıfından olabildiğince az sayıda eşleştir |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | Önceki karakter sınıfından 0 veya daha fazla eşleştir |
? | Önceki karakter sınıfından 1 veya daha az eşleştir |
%n | For n between 1 and 9 , match a substring equal to the 1> n1> th captured dizi. |
%bxy | Dengeleme işaretlemesi x, y ve her şey arasındaki her şeyi eşleştirir (örneğin, %b() bir ebeveyn olarak iki eşleştirmeyi ve her şeyi eşleştirir) |
Aynı patataya bir modifiyer eklemek ( "%d+" yerine "%d" çıktıları ile çıkar 25 yerine 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
Klas Setleri
Setler tek bir karakter sınıfının tüm işi yapamadığında kullanılmalıdır. durum, aynı küçük harfleri ( %l ) ve boşluk karakterlerini ( 0> %p0> ) kullanarak tek bir patronda eşleştirmek isteyebilirsiniz.
Setler, onların etrafındaki boşluklar ile tanımlanır. Aşağıdaki örnekte, bir seti kullanmanın ( %) ve kullanmayan bir setin ( %) farkını fark edin.
local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Yüklemeprint(match1) --> merhaba!!!local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Set olmayanprint(match2) --> o!!!
İlk komut (ayarla), Luau'nun hem düşük hem de boşluk karakterlerini bulmasını söyler. Tüm ayarlasonra eklenen + ölçeğiyle, bu karakterlerin hepsini bulur (ello!!!), alanına ulaştığında durur.
İkinci komutta (set olmayan) + ile sayıcı sadece %p sınıfının önündeki klasse uygulanır, bu yüzden Luau serisinin önündeki ilk altırgen karakteri ( o ) yakalar.
Karakter sınıfları gibi, setlerin "tersleri" olabilir. Bu, ayarlaaçılışından doğrudan sonra açılış [ ile birlikte bir "[%p%s]+" karakteri ekleyerek yapılır. durum, 1>#p
Ayrıca, bir başlangıç ve son karakter arasındaki bir dizi maçı bulmanızı sağlayan menziller destekleri de vardır. Bu, Lua 5.1 Kılavuzu ile daha ayrıntılı olarak açıklanmış bir özelliktir.
ip captures
String captures sub-patternleri bir patrondaki alt modellerdir. Bunlar () ile kaplanmıştır ve aynı sub-string'leri almak ve kaydetmek için kullanılır. Örneğin, aşağıdaki patron iki captures'ı içerir, () ve (%a+), bu da başarılı
local pattern = "(%a+)%s?=%s?(%d+)"local key1, val1 = string.match("TwentyOne = 21", pattern)print(key1, val1) --> TwentyOne 21local key2, val2 = string.match("TwoThousand= 2000", pattern)print(key2, val2) --> İki Bin 2000local key3, val3 = string.match("OneMillion=1000000", pattern)print(key3, val3) --> OneMillion 1000000
Önceki patterndeki, ? kantitesi, her iki %s sınıfını da takip eden güvenli bir ekledir, çünkü alanın her iki tarafındaki alanın herhangi biri (veya her ikisi de) eşit işaret etkisiyle boş bırakılır. Bu, eşit işaret etkisi olmayan bir alanın etrafında herhangi
String captures can also be katlanabilir as the following example:
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--> Bulut Krallığı cennet gibi--> Bulut Krallığı--> Orman Krallığı barışçıldır--> Forest Kingdom
Bu模a arama şu şekilde çalışır:
The string.gmatch() iterator aranır bir match on the entire "açıklama" pattern defined by the outer pair of parentheses. This stops at the first comma and captures the takip edilen:
# | Desen | Yakala |
---|---|---|
1. | (The%s:%a+%sKingdom][%w%s+) | Bulut Krallığı cennet gibi |
Başarılı ilk yakalayışını kullanarak, itici sonra "kraliyet" şemasının içinde belirlenen bir eşleşmeyi arar. Bu yuvarlama pateti sadece takip edilenyakalar:
# | Desen | Yakala |
---|---|---|
2) | :%a+%sKingdom) | Bulut Krallığı |
Dizge sonra çıkar ve tüm diziboyunca aranır, takip edilenyakalar:
# | Desen | Yakala |
---|---|---|
3 | (The%s:%a+%sKingdom][%w%s+) | Orman Krallığı barışçıldır |
4 | :%a+%sKingdom) | Orman Krallığı |
Yukarıdaki tüm ile ek olarak, boş bir yakalama ( () ) ile bir özel durum var. Eğer bir yakalama boşsa, strungaki pozisyon 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 42local start2, finish2 = string.match(match2, pattern)print(start2, finish2) --> 43 84
Bu özel yakalar normal yakalara göre katlanabilir:
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--> Bulut 10--> Forest 42
Geri döndürilen değerler, sayılar olarak değil, ip olarak geri döndürülür:
local match = "This is an example"local pattern = "This is an ()example"local position = string.match(match, pattern)print(typeof(position)) --> number