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