string.match()
Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 38 sur 54.
Alors que string.find() vous indique où un motif apparaît dans une chaîne, vous avez parfois besoin d'extraire le texte réel qui correspond. C'est là que string.match() intervient, et cela devient encore plus puissant lorsqu'il est combiné avec des captures.
Les captures vous permettent de marquer des parties spécifiques d'un motif que vous souhaitez extraire. Vous créez une capture en entourant une partie de votre motif par des parenthèses (). Lorsque string.match() trouve une correspondance, il renvoie le texte capturé au lieu de simplement la position.
Voici un exemple simple d'extraction d'un nombre à partir d'une chaîne de caractères :
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Résultat : 100Le motif %d+ signifie « un ou plusieurs chiffres ». Le + est un modificateur qui correspond à un ou plusieurs éléments de la classe de caractères précédente, vous permettant de capturer des nombres à plusieurs chiffres.
Vous pouvez utiliser des captures pour extraire des parties spécifiques d'un motif plus complexe :
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Résultat : AliceIci, les parenthèses autour de %a+ indiquent à Lua de capturer la séquence de lettres qui suit "User: ". Le reste du motif aide à localiser la bonne position, mais seule la partie capturée est renvoyée.
Si votre motif comporte plusieurs captures, string.match() les renvoie toutes sous forme de valeurs distinctes, que vous pouvez affecter à plusieurs variables à la fois.
Défi
FacileÉcrivez une fonction extractPrice qui prend text et renvoie la valeur du prix trouvée dans la chaîne.
Utilisez string.match() avec un motif de capture pour extraire le prix numérique qui apparaît après le signe dollar. Le motif doit capturer un ou plusieurs chiffres en utilisant %d+.
Paramètres :
text(string) : Une chaîne contenant un prix au format "Price: $XX"
Retourne : Le prix numérique sous forme de chaîne (string)
Aide-mémoire
Utilisez string.match() pour extraire du texte qui correspond à un motif :
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Résultat : 100Le modificateur + correspond à une ou plusieurs occurrences de la classe de caractères précédente :
%d+ -- un ou plusieurs chiffres
%a+ -- une ou plusieurs lettresUtilisez des parenthèses () pour créer des captures qui extraient des parties spécifiques d'un motif :
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Résultat : AliceLes captures multiples renvoient des valeurs distinctes :
local var1, var2 = string.match(text, "(pattern1)(pattern2)")Essayez vous-même
function extractPrice(text)
-- Écrire 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