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 helloReferensi 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 c6Tabel 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 tableDasar-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)
endTokenisasi 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 luaPenguraian 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) -- IstanbulMenghapus 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 13Menghitung 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) -- 4Pemeriksaan 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...%ndalam string pengganti merujuk pada tangkapangmatch(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
- Dasar-Dasar String: Penggabungan dan Panjang
- Menemukan dan Mengekstrak Substring
- string.format untuk Keluaran
- string.gsub dan string.gmatch