Alt Dizeleri Bulma ve Çıkarma
Metni bulup çıkarmak için string.find ve string.sub uygulayın.
Alt Dizeleri Bulma ve Çıkarma, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
string.find Temelleri
string.find(s, pattern, init, plain), init konumundan (varsayılan 1) başlayarak s içinde bir desen arar. Eşleşmenin başlangıç ve bitiş konumlarını, eşleşme bulunamazsa nil döndürür. plain=true olduğunda deseni gerçek bir dize olarak ele alır (özel karakterler yorumlanmaz).
local s = "hello world"
local i, j = string.find(s, "world")
print(i, j) -- 7 11
-- Plain search (literal string)
local i2, j2 = string.find("a+b=5", "+", 1, true)
print(i2, j2) -- 2 2
-- Not found
print(string.find(s, "xyz")) -- nilAyıklama için string.sub
string.sub(s, i, j), i konumundan j konumuna kadar olan alt dizeyi (uçlar dâhil) çıkarır. Negatif dizinler sondan sayar: -1 son karakterdir. j belirtilmezse varsayılan olarak dizenin sonu kullanılır.
local s = "hello world"
print(string.sub(s, 1, 5)) -- hello
print(string.sub(s, 7)) -- world
print(string.sub(s, -5)) -- world
print(string.sub(s, 1, -7)) -- hello
print(s:sub(7, 11)) -- world (method syntax)find ve sub Birlikte Kullanımı
Alt dizeleri bulup çıkarmak için string.find ve string.sub işlevlerini birleştirin. Önce ayırıcıyı bulun, ardından çevresindeki parçaları çıkarın. Bu, temel dize bölme yaklaşımıdır.
local s = "key=value"
local i = string.find(s, "=")
if i then
local key = string.sub(s, 1, i - 1)
local val = string.sub(s, i + 1)
print(key, val) -- key value
endDesen Yakalama için string.match
string.match(s, pattern, init), desenle eşleşen yakalanmış alt dizeleri döndürür. Desende yakalama yoksa eşleşmenin tamamını döndürür. Hiçbir şey eşleşmezse nil döndürür. Yakalamalar, desende parantezlerle tanımlanır.
local date = "2024-03-15"
local y, m, d = string.match(date, "(%d+)-(%d+)-(%d+)")
print(y, m, d) -- 2024 03 15
-- No capture: returns the whole match
local num = string.match("price: 42.5 USD", "%d+%.%d+")
print(num) -- 42.5Son Görünümü Bulma
Bir alt dizenin son görünümünü bulmak için başlangıç konumunu ilerleten bir döngüyle arama yapabilir veya sondan başlayarak arayabilirsiniz. Standart yaklaşım, string.find işlevini önceki eşleşmenin hemen sonrasındaki konumla çağırmaya, nil döndürene kadar devam etmektir.
local function findLast(s, sub)
local last_i, last_j
local i, j = string.find(s, sub, 1, true)
while i do
last_i, last_j = i, j
i, j = string.find(s, sub, j + 1, true)
end
return last_i, last_j
end
local i, j = findLast("a/b/c/d", "/")
print(i, j) -- 6 6Dosya Uzantılarını Çıkarma
string.match için pratik bir kullanım: bir dosya adından uzantıyı çıkarmak. "([^%.]+)$" deseni, dizenin sonundaki nokta içermeyen son diziyi yakalar; yalnızca son noktadan sonrasını yakalamak için "%.([^%.]+)$" kullanabilirsiniz.
local function getExt(filename)
return string.match(filename, "%.([^%.]+)$")
end
print(getExt("photo.jpg")) -- jpg
print(getExt("archive.tar.gz")) -- gz
print(getExt("README")) -- nil
print(getExt("config.lua.bak")) -- bakDizeleri Bölme
Lua'da yerleşik dize bölme işlevi yoktur; ancak bunu string.gmatch ile uygulayabilirsiniz. Ayırıcı olmayan tüm diziler üzerinde yineleyin veya ayırıcılar arasındaki bölümleri yakalayan bir desen kullanın.
local function split(s, sep)
local result = {}
local pattern = "([^" .. sep .. "]+)"
for part in string.gmatch(s, pattern) do
result[#result+1] = part
end
return result
end
local parts = split("one,two,three,four", ",")
for i, p in ipairs(parts) do
print(i, p)
end
-- 1 one 2 two 3 three 4 fourBoşlukları Kırpma
Başlangıçtaki ve sondaki boşlukları, onları eşleştirip atarak kaldırın. "^%s*(.-)%s*$" deseni, isteğe bağlı başlangıç ve bitiş boşlukları arasındaki en kısa içeriği yakalamak için tembel niceleyici .- kullanır.
local function trim(s)
return string.match(s, "^%s*(.-)%s*$")
end
print("|" .. trim(" hello ") .. "|") -- |hello|
print("|" .. trim(" \t\n") .. "|") -- ||
print("|" .. trim("no spaces") .. "|") -- |no spaces|Metinden Sayı Çıkarma
Bir dizedeki tüm sayıları çıkarmak için string.gmatch işlevini bir sayı deseniyle kullanın. %-?%d+%.?%d* deseni; isteğe bağlı negatif işareti, rakamları, isteğe bağlı ondalık noktayı ve ek rakamları eşleştirir.
local text = "Revenue: $1,234.56 Expenses: $567.89 Net: $666.67"
local numbers = {}
for n in string.gmatch(text, "%d+%.?%d*") do
numbers[#numbers+1] = tonumber(n)
end
for _, v in ipairs(numbers) do
io.write(v .. " ")
end
print() -- 1 234.0 56.0 567.89 666.67Dize Konumlarını Normalleştirme
Lua'nın negatif dizinleri, bir dizenin sonundan çalışmanıza olanak tanır. string.sub(s, -n), son n karakteri alır. Konumları hesaplamak için bunu #s ile birleştirin. Pozitif ve negatif dizinler arasındaki ilişkiyi anlamak, bir eksik ya da fazla konum hatalarını önler.
local s = "abcdefgh"
-- Last 3 characters
print(s:sub(-3)) -- fgh
-- All but last 2
print(s:sub(1, -3)) -- abcdef
-- Character at position from end
print(s:sub(-1, -1)) -- h
print(s:sub(-4, -2)) -- efgHızlı Kontrol
string.sub("hello", 2, -2) ne döndürür?
Özet: Bulma ve Çıkarma
Özet:
string.find(s, pat, init, plain)— başlangıç ve bitiş konumlarını ya da nil'i döndürürstring.sub(s, i, j)— konuma göre çıkarır; negatif dizinler sondan sayarstring.match(s, pat)— yakalamaları veya eşleşmenin tamamını döndürür- Gerçek dize araması için
plain=truekullanın (özel karakterler yorumlanmaz) - Bölme işlemini
string.gmatchile uygulayın - Kırpma için
"^%s*(.-)%s*$"desenini kullanın
Sıkça Sorulan Sorular
“Alt Dizeleri Bulma ve Çıkarma” dersi ücretsiz mi?
Evet — “Alt Dizeleri Bulma ve Çıkarma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Alt Dizeleri Bulma ve Çıkarma” dersinde ne öğreneceğim?
Metni bulup çıkarmak için string.find ve string.sub uygulayın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Alt Dizeleri Bulma ve Çıkarma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Dizelere Giriş: Birleştirme ve Uzunluk
- Alt Dizeleri Bulma ve Çıkarma
- Çıktı için string.format
- string.gsub ve string.gmatch