Quelques exemples simples, pour illustrer ce qui vient d'être dit.
Et plutôt que de répéter toujours les mêmes choses, je vais créer une fonction intitulée: FindPattern()
function FindPattern(text, pattern, start) return string.sub(text, string.find(text, pattern, start)) end
Les classes de caractères.
-- Recherche la position de "an" et "ou" print(string.find("banane", "an")) --> 2 3 print(string.find("banane", "ou")) --> nil local s = "une petite phrase" -- Recherche un mot commencent par... print(FindPattern(s, "p.....")) --> petite print(FindPattern(s, "p.....", 6)) --> phrase -- Recherche une lettre print(FindPattern(s, "%a")) --> u -- Recherche tout ce qui est lettre print(FindPattern(s, "%a+")) --> une local s = "nous sommes en 2012" -- Recherche un chiffre print(FindPattern(s, "%d")) --> 2 -- Recherche tout ce qui est chiffre print(FindPattern(s, "%d+")) --> 2012 -- Recherche une lettre CAPITALE print(FindPattern("mAjuscUle", "%u")) --> A -- Recherche une lettre minuscule print(FindPattern("MInUScUle", "%l")) --> n -- Recherche une minuscule suivie d'une capitale print(FindPattern("MInUScUle", "%l%u"))-->nU
Les ensembles.
-- Recherche la première occurrence d'une des lettres "x, y, j, k, n" print(FindPattern("banana", "[xyjkn]")) --> n -- Recherche la première occurrence d'une des lettres comprise entre j et q print(FindPattern("banana", "[j-q]")) --> n -- Recherche ce qui n'est pas a ou b print(FindPattern("banana", "[^ba]")) --> n -- Recherche ce qui n'est pas compris entre a et n print(FindPattern("bananas", "[^a-n]")) --> s -- Recherche ce qui n'est pas lettre minuscule ou espace print(FindPattern("nous sommes en 2012", "[%l%s]")) --> 2
Les captures.
-- Capture 3 lettres après le w print(string.find("a word to the wise", "w(...)")) --> 3 6 ord -- Capture 2 lettres y-compris le w print(string.find("a word to the wise", "(w.)(..)")) --> 3 6 wo -- Capture le mot et ce qui est imbriqué (2 lettres) print(string.find("a word to the wise", "(w(..).)")) --> 3 6 word or -- Remplacer les mots qui commence par t, par banana print(string.gsub("a word to the wise", "(t%a+)", "banana")) --> a word banana banana wise 2 -- (2 est le nombre de substitutions)
Les répétitions.
* pour zéro ou plusieurs caractères du pattern. (* recherche la séquence la plus longue.) print(FindPattern("bananas", "az*")) --> a print(FindPattern("bananas", "an*")) --> an print(FindPattern("bannnnnanas", "an*")) --> annnnnn + pour une ou plusieurs caractères du pattern print(string.find("banana", "az+")) --> nil print(FindPattern("bananas", "an+")) --> an print(FindPattern("bannnnnanas", "an+")) --> annnnn - pour zéro ou plusieurs caractères du pattern. (- recherche la séquence la plus courte.) print(FindPattern("bananas", "az-")) --> a print(FindPattern("bananas", "an-")) --> a print(FindPattern("bannnnnanas", "an-")) --> a ? pour zéro ou une occurrence du pattern print(FindPattern("bananas", "az?")) --> a print(FindPattern("bananas", "an?")) --> an print(FindPattern("bannnnnanas", "an?")) --> an