string.gsub et string.gmatch
Remplacez les correspondances de motifs dans les chaînes et parcourez-les.
string.gsub et string.gmatch est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Notions de base sur string.gsub
string.gsub(s, pattern, repl, n) remplace dans s les correspondances de pattern par repl, au plus n fois (par défaut : toutes). Elle renvoie la chaîne obtenue et le nombre de remplacements effectués. Le remplacement peut être une chaîne, une table ou une fonction.
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 helloRéférences aux captures dans un remplacement
Dans la chaîne de remplacement, %1, %2, etc. font référence aux captures du motif. %0 désigne la correspondance complète. Utilisez-les pour réorganiser le texte correspondant ou l'entourer.
-- 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]Fonction utilisée comme remplacement
Lorsque le remplacement est une fonction, gsub l'appelle pour chaque correspondance (ou capture) et utilise la valeur renvoyée comme remplacement. Renvoyez nil ou false pour conserver la correspondance d'origine. Cela permet d'effectuer des remplacements dynamiques calculés.
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 c6Table utilisée comme remplacement
Lorsque le remplacement est une table, gsub recherche chaque correspondance (ou la première capture) dans la table et utilise le résultat. Si la recherche renvoie nil ou false, la correspondance d'origine est conservée. Cette technique est idéale pour les dictionnaires de substitution.
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 tableNotions de base sur string.gmatch
string.gmatch(s, pattern) renvoie un itérateur sur toutes les correspondances de pattern dans s. Chaque appel à l'itérateur renvoie la correspondance suivante (ou les captures si le motif en contient). C'est la manière idiomatique de parcourir les correspondances en 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)
endCréer des jetons avec gmatch
Utilisez string.gmatch pour créer des jetons à partir de l'entrée : découpez selon les espaces, analysez des lignes CSV ou extrayez des données structurées. Le motif définit les éléments à capturer ; tout le reste est traité comme un séparateur.
-- 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 luaAnalyser les paramètres d'une URL
Analysez les chaînes de requête en parcourant les paires clé-valeur. Le motif ([^&=]+)=([^&]+) capture chaque clé et chaque valeur séparées par =, entre les délimiteurs &.
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) -- IstanbulSupprimer les balises HTML
Une tâche courante de traitement de texte consiste à supprimer les balises HTML d'une chaîne. Utilisez string.gsub avec un motif qui correspond aux balises ouvrantes et fermantes, puis remplacez-les par une chaîne vide.
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)Échapper les caractères spéciaux
Les caractères spéciaux des motifs Lua sont les suivants : . + * ? [ ] ^ $ % ( ). Pour les faire correspondre littéralement, échappez-les avec %. Lorsque vous utilisez des chaînes littérales contenant ces caractères, passez true comme quatrième argument à string.find afin de désactiver la recherche par motif.
-- 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 13Compter les occurrences
Utilisez la deuxième valeur renvoyée par string.gsub (le nombre de remplacements) pour compter les occurrences d'un motif dans une chaîne, même sans effectuer de remplacement.
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) -- 4Vérification rapide
Que renvoie string.gsub("hello", "l", "L") ?
Récapitulatif : gsub et gmatch
Résumé :
gsub(s, pat, repl, n)— remplace ; repl peut être une chaîne, une table ou une fonction%1...%ndans les chaînes de remplacement font référence aux capturesgmatch(s, pat)— parcourt toutes les correspondances- Utilisez
%pour échapper les caractères spéciaux des motifs :%.%+, etc. - Comptez les occurrences avec la deuxième valeur renvoyée par gsub
Questions Fréquemment Posées
La leçon « string.gsub et string.gmatch » est-elle gratuite ?
Oui — le texte complet de « string.gsub et string.gmatch » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « string.gsub et string.gmatch » ?
Remplacez les correspondances de motifs dans les chaînes et parcourez-les. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « string.gsub et string.gmatch » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Notions de base sur les chaînes : concaténation et longueur
- Rechercher et extraire des sous-chaînes
- string.format pour la sortie
- string.gsub et string.gmatch