0Pricing
Lua Academy · Pelajaran

string.gsub dan string.gmatch

Ganti dan lakukan iterasi pada kecocokan pola dalam string.

string.gsub dan string.gmatch adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Dasar-Dasar string.gsub

string.gsub(s, pattern, repl, n) mengganti kecocokan pattern dalam s dengan repl, hingga n kali (nilai bawaan: semua). Fungsi ini mengembalikan string hasil dan jumlah penggantian yang dilakukan. Penggantinya dapat berupa string, tabel, atau fungsi.

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

Referensi Tangkapan dalam Penggantian

Dalam string pengganti, %1, %2, dan seterusnya merujuk pada tangkapan dalam pola. %0 merujuk pada seluruh kecocokan. Gunakan ini untuk menyusun ulang atau membungkus teks yang cocok.

-- 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]

Fungsi sebagai Pengganti

Jika penggantinya berupa fungsi, gsub memanggil fungsi tersebut untuk setiap kecocokan (atau tangkapan), lalu menggunakan nilai yang dikembalikan sebagai pengganti. Kembalikan nil atau false untuk mempertahankan kecocokan asli. Dengan demikian, Anda dapat membuat penggantian yang dinamis dan dihitung.

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

Tabel sebagai Pengganti

Jika penggantinya berupa tabel, gsub mencari setiap kecocokan (atau tangkapan pertama) dalam tabel dan menggunakan hasilnya. Jika pencarian mengembalikan nil atau false, kecocokan asli dipertahankan. Ini sangat cocok untuk kamus substitusi.

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

Dasar-Dasar string.gmatch

string.gmatch(s, pattern) mengembalikan iterator untuk semua kecocokan pattern dalam s. Setiap pemanggilan iterator mengembalikan kecocokan berikutnya (atau tangkapan jika pola memilikinya). Ini adalah cara idiomatis untuk melakukan iterasi pada kecocokan di Lua.

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

Tokenisasi dengan gmatch

Gunakan string.gmatch untuk melakukan tokenisasi input: memisahkan berdasarkan spasi putih, mengurai baris CSV, atau mengekstrak data terstruktur. Pola menentukan bagian yang ditangkap; bagian lainnya diperlakukan sebagai pemisah.

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

Penguraian Parameter URL

Urai string kueri dengan melakukan iterasi pada pasangan kunci-nilai. Pola ([^&=]+)=([^&]+) menangkap setiap kunci dan nilai yang dipisahkan oleh =, di antara pemisah &.

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

Menghapus Tag HTML

Salah satu tugas umum pemrosesan teks adalah menghapus tag HTML dari string. Gunakan string.gsub dengan pola yang mencocokkan tag pembuka dan penutup, lalu menggantinya dengan string kosong.

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)

Meng-escape Karakter Khusus

Karakter khusus pola Lua adalah: . + * ? [ ] ^ $ % ( ). Untuk mencocokkannya secara literal, gunakan escape dengan %. Saat menggunakan string biasa yang berisi karakter tersebut, berikan true sebagai argumen keempat string.find untuk menonaktifkan pencocokan pola.

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

Menghitung Kemunculan

Gunakan nilai pengembalian kedua dari string.gsub (jumlah penggantian) untuk menghitung kemunculan pola dalam string, bahkan tanpa melakukan penggantian.

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

Pemeriksaan Singkat

Apa yang dikembalikan oleh string.gsub("hello", "l", "L")?

Ringkasan: gsub dan gmatch

Ringkasan:

  • gsub(s, pat, repl, n)—mengganti; repl dapat berupa string/tabel/fungsi
  • %1...%n dalam string pengganti merujuk pada tangkapan
  • gmatch(s, pat)—melakukan iterasi pada semua kecocokan
  • Gunakan % untuk melakukan escape pada karakter khusus pola: %., %+, dan sebagainya.
  • Menghitung kemunculan: nilai pengembalian kedua dari gsub

Pertanyaan yang Sering Diajukan

Apakah pelajaran “string.gsub dan string.gmatch” gratis?

Ya — teks lengkap “string.gsub dan string.gmatch” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “string.gsub dan string.gmatch”?

Ganti dan lakukan iterasi pada kecocokan pola dalam string. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “string.gsub dan string.gmatch” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar String: Penggabungan dan Panjang
  2. Menemukan dan Mengekstrak Substring
  3. string.format untuk Keluaran
  4. string.gsub dan string.gmatch
← Kembali ke Lua Academy