Menu
Coddy logo textTech

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ı: Alice

Burada, %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.

challenge icon

Görev

Kolay

text 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 harf

Bir 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ı: Alice

Birden 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
quiz iconKendini test et

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