0Pricing
Lua Academy · Ders

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"))  -- nil

Ayı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
end

Desen 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.5

Son 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  6

Dosya 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"))   -- bak

Dizeleri 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 four

Boş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.67

Dize 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)) -- efg

Hı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ür
  • string.sub(s, i, j) — konuma göre çıkarır; negatif dizinler sondan sayar
  • string.match(s, pat) — yakalamaları veya eşleşmenin tamamını döndürür
  • Gerçek dize araması için plain=true kullanın (özel karakterler yorumlanmaz)
  • Bölme işlemini string.gmatch ile 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

  1. Dizelere Giriş: Birleştirme ve Uzunluk
  2. Alt Dizeleri Bulma ve Çıkarma
  3. Çıktı için string.format
  4. string.gsub ve string.gmatch
← Lua Academy Sayfasına Dön