0Pricing
Lua Academy · Ders

string.gsub ve string.gmatch

Dizelerdeki örüntü eşleşmelerini değiştirin ve bunlar üzerinde yineleme yapın.

string.gsub ve string.gmatch, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. 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.gsub Temelleri

string.gsub(s, pattern, repl, n), s içindeki pattern eşleşmelerini repl ile en fazla n kez (varsayılan: tümünü) değiştirir. Ortaya çıkan dizeyi ve yapılan değiştirme sayısını döndürür. Değiştirme bir dize, tablo veya işlev olabilir.

local s = "hello world hello"
local result, count = string.gsub(s, "hello", "hi")
print(result)  -- hi world hi
print(count)   -- 2

-- Limit replacements
local r2 = string.gsub(s, "hello", "hi", 1)
print(r2)      -- hi world hello

Değiştirmede Yakalama Başvuruları

Değiştirme dizesindeki %1, %2 ve benzeri ifadeler desendeki yakalamalara başvurur. %0, eşleşmenin tamamını belirtir. Eşleşen metni yeniden düzenlemek veya çevrelemek için bunu kullanın.

-- Swap first and last name
local name = "Smith, John"
local swapped = string.gsub(name, "(%a+), (%a+)", "%2 %1")
print(swapped)   -- John Smith

-- Wrap numbers in brackets
local text = "items: 3 and 7 total 10"
local tagged = string.gsub(text, "%d+", "[%0]")
print(tagged)    -- items: [3] and [7] total [10]

Değiştirme olarak İşlev

Değiştirme bir işlev olduğunda gsub, her eşleşme (veya yakalama) için bu işlevi çağırır ve dönüş değerini değiştirme olarak kullanır. Özgün eşleşmeyi korumak için nil veya false döndürün. Bu, dinamik ve hesaplanmış değiştirmeler yapılmasını sağlar.

local env = {NAME="Lua", VERSION="5.4"}
local template = "Welcome to $NAME version $VERSION!"
local result = string.gsub(template, "%$(%w+)", env)
print(result)   -- Welcome to Lua version 5.4!

-- Double each number
local s = "a1 b2 c3"
local r = string.gsub(s, "%d+", function(n)
  return tostring(tonumber(n) * 2)
end)
print(r)  -- a2 b4 c6

Değiştirme olarak Tablo

Değiştirme bir tablo olduğunda gsub, her eşleşmeyi (veya ilk yakalamayı) tabloda arar ve sonucu kullanır. Arama nil veya false döndürürse özgün eşleşme korunur. Bu özellik, değiştirme sözlükleri için idealdir.

local abbreviations = {
  str = "string",
  num = "number",
  tbl = "table",
  fn  = "function",
}

local text = "A str can hold a num or a tbl"
local expanded = string.gsub(text, "%a+", abbreviations)
print(expanded)
-- A string can hold a number or a table

string.gmatch Temelleri

string.gmatch(s, pattern), s içindeki pattern eşleşmelerinin tümü üzerinde çalışan bir yineleyici döndürür. Yineleyicinin her çağrısı bir sonraki eşleşmeyi (desende yakalamalar varsa bunları) döndürür. Lua'da eşleşmeler üzerinde yineleme yapmanın alışılmış yolu budur.

local s = "one=1 two=2 three=3"

-- Iterate all words
for word in string.gmatch(s, "%a+") do
  io.write(word .. " ")
end
print()  -- one two three

-- Iterate key=value pairs
for k, v in string.gmatch(s, "(%a+)=(%d+)") do
  print(k, v)
end

gmatch ile Belirteçlere Ayırma

Girdiyi belirteçlere ayırmak için string.gmatch kullanın: boşluklara göre bölün, CSV satırlarını ayrıştırın veya yapılandırılmış verileri çıkarın. Desen, neyin yakalanacağını tanımlar; geri kalan her şey ayırıcı olarak ele alınır.

-- Split by whitespace
local function tokenize(s)
  local tokens = {}
  for token in string.gmatch(s, "%S+") do
    tokens[#tokens+1] = token
  end
  return tokens
end

local toks = tokenize("  hello   world   lua  ")
for i, t in ipairs(toks) do
  print(i, t)
end
-- 1 hello  2 world  3 lua

URL Parametrelerini Ayrıştırma

Sorgu dizelerini anahtar-değer çiftleri üzerinde yineleyerek ayrıştırın. ([^&=]+)=([^&]+) deseni, & ayırıcıları arasında = ile ayrılmış her anahtarı ve değeri yakalar.

local url_params = "name=Alice&age=30&city=Istanbul"
local params = {}

for key, value in string.gmatch(url_params, "([^&=]+)=([^&]*)") do
  params[key] = value
end

print(params.name)  -- Alice
print(params.age)   -- 30
print(params.city)  -- Istanbul

HTML Etiketlerini Kaldırma

Yaygın bir metin işleme görevi, bir dizedeki HTML etiketlerini kaldırmaktır. Açılış ve kapanış etiketleriyle eşleşen, ardından bunları boş dizeyle değiştiren bir desenle string.gsub kullanın.

local html = "<h1>Hello</h1> <p>World <b>bold</b></p>"
local plain = string.gsub(html, "<[^>]+>", "")
print(plain)   -- Hello  World bold

-- Replace <br> with newline
local html2 = "line1<br>line2<br/>line3"
local fixed = string.gsub(html2, "<br/?>", "\n")
print(fixed)

Özel Karakterleri Kaçışlama

Lua desenlerindeki özel karakterler şunlardır: . + * ? [ ] ^ $ % ( ). Bunları gerçek karakterler olarak eşleştirmek için % ile kaçışlayın. Bu karakterleri içeren düz dizeler kullanırken desen eşleştirmeyi devre dışı bırakmak için string.find işlevinin dördüncü bağımsız değişkeni olarak true geçirin.

-- Escape a string for use in a pattern
local function escapePattern(s)
  return (string.gsub(s, "[%(%)%.%%%+%-%*%?%[%^%$]", "%%%1"))
end

local query = "1+1=2"
local pattern = escapePattern(query)
print(string.find("result: 1+1=2", pattern, 1))  -- 9  13

Görünümleri Sayma

Hiçbir değiştirme yapmadan bile bir dizedeki desen görünümlerini saymak için string.gsub işlevinin ikinci dönüş değerini (değiştirme sayısını) kullanın.

local text = "banana"
local _, count = string.gsub(text, "a", "")
print("'a' appears " .. count .. " times")  -- 3

-- Count words
local sentence = "the quick brown fox"
local _, wordCount = string.gsub(sentence, "%S+", "")
print("Words:", wordCount)  -- 4

Hızlı Kontrol

string.gsub("hello", "l", "L") ne döndürür?

Özet: gsub ve gmatch

Özet:

  • gsub(s, pat, repl, n) — değiştirir; repl dize/tablo/işlev olabilir
  • Değiştirme dizelerindeki %1...%n ifadeleri yakalamalara başvurur
  • gmatch(s, pat) — tüm eşleşmeler üzerinde yineleme yapar
  • Özel desen karakterlerini kaçışlamak için % kullanın: %., %+ vb.
  • Görünümleri sayma: gsub işlevinin ikinci dönüş değeri

Sıkça Sorulan Sorular

“string.gsub ve string.gmatch” dersi ücretsiz mi?

Evet — “string.gsub ve string.gmatch” 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.

“string.gsub ve string.gmatch” dersinde ne öğreneceğim?

Dizelerdeki örüntü eşleşmelerini değiştirin ve bunlar üzerinde yineleme yapı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 4. dersidir.

“string.gsub ve string.gmatch” 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