Menu
Coddy logo textTech

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
end

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

Le 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
-- language
challenge icon

Dé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
end

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

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

Essayez vous-même

function extractHashtags(text)
    -- Écrivez le code ici
end
quiz iconTestez-vous

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