Itération avec string.gmatch()
Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 39 sur 54.
Alors que string.match() trouve la première occurrence d'un motif, que faire si vous avez besoin de trouver toutes les correspondances dans une chaîne ? La fonction string.gmatch() résout cela en retournant un itérateur que vous pouvez utiliser dans une boucle for pour traiter chaque correspondance une par une.
La syntaxe de base ressemble à ceci :
for match in string.gmatch(text, pattern) do
-- traiter chaque correspondance
endVoici un exemple qui trouve tous les nombres dans une chaîne de caractères :
local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
print(number)
end
-- Sortie :
-- 3
-- 5Le motif %d+ correspond à un ou plusieurs chiffres, et la boucle s'exécute une fois pour chaque nombre trouvé.
Vous pouvez également extraire tous les mots d'une phrase :
local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- Sortie :
-- Lua
-- is
-- a
-- powerful
-- languageDéfi
FacileÉcrivez une fonction extractHashtags qui prend text et renvoie tous les hashtags trouvés dans le texte, chacun sur une ligne séparée.
Utilisez string.gmatch() pour trouver tous les hashtags dans le texte. Un hashtag commence par # suivi d'une ou plusieurs lettres.
Logique :
- Utilisez
string.gmatch()avec le motif"#%a+"pour trouver tous les hashtags - Parcourez chaque correspondance et collectez-les
- Joignez tous les hashtags avec des caractères de nouvelle ligne (
\n) - Si aucun hashtag n'est trouvé, renvoyez une chaîne vide
Paramètres :
text(string) : Le texte dans lequel rechercher des hashtags
Retourne : Tous les hashtags trouvés, chacun sur une ligne séparée. Si aucun hashtag n'existe, renvoyez une chaîne vide (string)
Aide-mémoire
La fonction string.gmatch() renvoie un itérateur qui trouve toutes les occurrences d'un motif dans une chaîne de caractères, vous permettant de traiter chaque correspondance dans une boucle for.
Syntaxe de base :
for match in string.gmatch(text, pattern) do
-- traiter chaque correspondance
endExemple pour trouver tous les nombres :
local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
print(number)
end
-- Sortie :
-- 3
-- 5Exemple pour extraire tous les mots :
local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- Sortie :
-- Lua
-- is
-- a
-- powerful
-- languageEssayez vous-même
function extractHashtags(text)
-- Écrivez le code ici
end
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() vs. ipairs()Récapitulatif - Fiche de personnage4Introduction aux Metatables
Qu'est-ce qu'une Metatable ?setmetatable & getmetatableLa métaméthode __indexLa métaméthode __newindexLa métaméthode __tostringMétaméthodes arithmétiques - Partie 1Métaméthodes arithmétiques - Partie 2Récapitulatif - Table en lecture seule7Manipulation avancée de chaînes
string.gsub() pour la substitutionIntro aux motifs de chaînesstring.find()string.match()Itération avec string.gmatch()Récapitulatif - Analyseur de fichiers de log2Plus de fonctions de la bibliothèque table
table.concat()Construction de table & unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des scores3Concepts avancés sur les fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu'est-ce qu'une closure ?Récapitulatif - Gestionnaire d'événements simple