Les langages / Lua / Chaines de caracteres
Patterns et expressions régulières
Lua utilise son propre système de patterns (motifs) pour la recherche et manipulation de texte. Bien que différent des regex classiques, il est très puissant et plus simple à apprendre.
Classes de caractères
local texte = "Lua 5.4 est sorti en 2020"
-- %d = chiffre, %a = lettre, %s = espace
local version = string.match(texte, "Lua %d%.%d")
print(version) -- Lua 5.4
-- Extraire tous les nombres
for nombre in string.gmatch(texte, "%d+") do
print(nombre) -- 5, 4, 2020
end
-- %w = alphanumérique, %p = ponctuation
local mot = string.match("Hello, World!", "%a+")
print(mot) -- Hello
Quantificateurs et captures
-- + = 1 ou plus, * = 0 ou plus, - = 0 ou plus (non-greedy)
local email = "contact@exemple.fr"
local user, domain = string.match(email, "([%w%.]+)@([%w%.]+)")
print("User:", user) -- contact
print("Domain:", domain) -- exemple.fr
-- Capturer plusieurs groupes
local date = "2024-03-15"
local annee, mois, jour = string.match(date, "(%d+)-(%d+)-(%d+)")
print(annee, mois, jour) -- 2024 03 15
Validation de données
-- Vérifier un format
function estEmailValide(email)
return string.match(email, "^[%w%.]+@[%w%.]+%.[%a]+$") ~= nil
end
print(estEmailValide("test@mail.com")) -- true
print(estEmailValide("invalide")) -- false
-- Vérifier un numéro de téléphone
function estTelephoneValide(tel)
return string.match(tel, "^0%d %d%d %d%d %d%d %d%d$") ~= nil
end
print(estTelephoneValide("06 12 34 56 78")) -- true
Nettoyage de texte
-- Supprimer les espaces en début/fin
function trim(s)
return string.match(s, "^%s*(.-)%s*$")
end
print("[" .. trim(" Hello ") .. "]") -- [Hello]
-- Normaliser les espaces multiples
function normaliserEspaces(s)
return string.gsub(s, "%s+", " ")
end
local texte = "Trop d'espaces ici"
print(normaliserEspaces(texte)) -- Trop d'espaces ici
2 exercices pour cette lecon
Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte
- Pattern matching basique difficile 35 XP
- String.gsub pour remplacer difficile 35 XP