string.gsub e string.gmatch
Sostituisca le corrispondenze dei pattern nelle stringhe e le attraversi.
string.gsub e string.gmatch è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Nozioni di base su string.gsub
string.gsub(s, pattern, repl, n) sostituisce in s le corrispondenze di pattern con repl, fino a n volte (per impostazione predefinita, tutte). Restituisce la stringa risultante e il numero di sostituzioni effettuate. La sostituzione può essere una stringa, una tabella o una funzione.
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 helloRiferimenti alle acquisizioni nella sostituzione
Nella stringa di sostituzione, %1, %2 e così via fanno riferimento alle acquisizioni del pattern. %0 fa riferimento all'intera corrispondenza. Utilizzi questi riferimenti per riordinare o racchiudere il testo trovato.
-- 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]Funzione come sostituzione
Quando la sostituzione è una funzione, gsub la chiama con ogni corrispondenza, o con le relative acquisizioni, e utilizza il valore restituito come sostituzione. Restituisca nil o false per mantenere la corrispondenza originale. Questo consente di eseguire sostituzioni dinamiche calcolate.
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 c6Tabella come sostituzione
Quando la sostituzione è una tabella, gsub cerca nella tabella ogni corrispondenza, o la prima acquisizione, e utilizza il risultato. Se la ricerca restituisce nil o false, mantiene la corrispondenza originale. È ideale per i dizionari di sostituzione.
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 tableNozioni di base su string.gmatch
string.gmatch(s, pattern) restituisce un iteratore su tutte le corrispondenze di pattern in s. Ogni chiamata all'iteratore restituisce la corrispondenza successiva, oppure le acquisizioni se il pattern ne contiene. È il modo idiomatico di scorrere le corrispondenze in 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)
endTokenizzazione con gmatch
Utilizzi string.gmatch per tokenizzare l'input: dividere in base agli spazi bianchi, analizzare righe CSV o estrarre dati strutturati. Il pattern definisce cosa acquisire; tutto il resto viene trattato come separatore.
-- 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 luaAnalisi dei parametri URL
Analizzi le stringhe di query iterando sulle coppie chiave-valore. Il pattern ([^&=]+)=([^&]+) acquisisce ogni chiave e ogni valore separati da =, tra i delimitatori &.
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) -- IstanbulRimuovere i tag HTML
Un'attività comune di elaborazione del testo consiste nel rimuovere i tag HTML da una stringa. Utilizzi string.gsub con un pattern che individua i tag di apertura e chiusura, sostituendoli con una stringa vuota.
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)Eseguire l'escape dei caratteri speciali
I caratteri speciali dei pattern Lua sono: . + * ? [ ] ^ $ % ( ). Per trovarli letteralmente, esegua l'escape con %. Quando utilizza stringhe semplici contenenti questi caratteri, passi true come quarto argomento a string.find per disabilitare la ricerca tramite pattern.
-- 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 13Contare le occorrenze
Utilizzi il secondo valore restituito da string.gsub, cioè il numero di sostituzioni, per contare le occorrenze di un pattern in una stringa, anche senza effettuare alcuna sostituzione.
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) -- 4Verifica rapida
Che cosa restituisce string.gsub("hello", "l", "L")?
Riepilogo: gsub e gmatch
Riepilogo:
gsub(s, pat, repl, n)— sostituisce; repl può essere una stringa, una tabella o una funzione%1...%nnelle stringhe di sostituzione fanno riferimento alle acquisizionigmatch(s, pat)— scorre tutte le corrispondenze- Utilizzi
%per eseguire l'escape dei caratteri speciali dei pattern:%.,%+e così via - Conta le occorrenze con il secondo valore restituito da gsub
Domande Frequenti
La lezione «string.gsub e string.gmatch» è gratuita?
Sì — il testo completo di «string.gsub e string.gmatch» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «string.gsub e string.gmatch»?
Sostituisca le corrispondenze dei pattern nelle stringhe e le attraversi. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «string.gsub e string.gmatch»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Nozioni di base sulle stringhe: concatenazione e lunghezza
- Ricerca ed estrazione di sottostringhe
- string.format per l'output
- string.gsub e string.gmatch