string.match()
Coddy'nin Lua Journey'sinin Logic & Flow bölümünün bir parçası — ders 38 / 54.
string.find() bir dizge içinde bir desenin nerede göründüğünü söylerken, bazen eşleşen asıl metni ayıklamanız gerekir. İşte burada string.match() devreye girer ve yakalamalarla (captures) birleştirildiğinde daha da güçlü hale gelir.
Yakalamalar, bir desenin çıkarmak istediğiniz belirli kısımlarını işaretlemenize olanak tanır. Deseninizin bir kısmını parantez () içine alarak bir yakalama oluşturursunuz. string.match() bir eşleşme bulduğunda, sadece konum yerine yakalanan metni döndürür.
İşte bir dizeden sayı çıkaran basit bir örnek:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Çıktı: 100%d+ deseni "bir veya daha fazla basamak" anlamına gelir. +, önceki karakter sınıfının bir veya daha fazlasıyla eşleşen bir değiştiricidir ve çok basamaklı sayıları yakalamanıza olanak tanır.
Daha karmaşık bir kalıbın belirli kısımlarını ayıklamak için yakalamaları (captures) kullanabilirsiniz:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Çıktı: AliceBurada, %a+ etrafındaki parantezler Lua'ya "User: " ifadesinden sonra gelen harf dizisini yakalamasını söyler. Desenin geri kalanı doğru konumu bulmaya yardımcı olur, ancak yalnızca yakalanan kısım döndürülür.
Eğer deseniniz birden fazla yakalamaya sahipse, string.match() bunların hepsini ayrı değerler olarak döndürür ve bunları aynı anda birden fazla değişkene atayabilirsiniz.
Görev
Kolaytext alan ve dizede bulunan fiyat değerini döndüren bir extractPrice fonksiyonu yazın.
Dolar işaretinden sonra gelen sayısal fiyatı ayıklamak için bir yakalama deseni ile string.match() kullanın. Desen, %d+ kullanarak bir veya daha fazla basamağı yakalamalıdır.
Parametreler:
text(string): "Price: $XX" formatında bir fiyat içeren bir dize
Döndürür: Dize olarak sayısal fiyat (string)
Kopya kağıdı
Bir desene uyan metni ayıklamak için string.match() kullanın:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Çıktı: 100+ değiştiricisi, önceki karakter sınıfından bir veya daha fazlasıyla eşleşir:
%d+ -- bir veya daha fazla rakam
%a+ -- bir veya daha fazla harfBir desenin belirli kısımlarını ayıklayan yakalamalar (captures) oluşturmak için parantez () kullanın:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Çıktı: AliceBirden fazla yakalama ayrı değerler döndürür:
local var1, var2 = string.match(text, "(pattern1)(pattern2)")Kendin dene
function extractPrice(text)
-- Kodunuzu buraya yazın
end
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow bölümündeki tüm dersler
1İleri Düzey Tablo Yineleme
pairs() ile Yinelemeipairs() ile Yinelemepairs() vs. ipairs()Özet - Karakter Sayfası4Metatable'lara Giriş
Metatable Nedir?setmetatable & getmetatable__index Metametodu__newindex Metametodu__tostring MetametoduAritmetik Metametotlar Bölüm 1Aritmetik Metametotlar Bölüm 2Özet - Salt Okunur Tablo7İleri Düzey String Manipülasyonu
Yer Değiştirme için string.gsub()String Desenlerine Girişstring.find()string.match()string.gmatch() ile YinelemeÖzet - Log Dosyası Ayrıştırıcı2Daha Fazla Tablo Kütüphanesi Fonksiyonu
table.concat()Tablo Oluşturma ve unpack()table.sort()Fonksiyonlar ile Özel SıralamaÖzet - Yüksek Skor Tablosu