Lua: Le tutoriel  wxWidgets
Lua
Les strings: Qu'est-ce qu'un "pattern"?...

L'utilisation de base de certaines fonctions sur les chaînes de caractères, consiste à rechercher un "pattern" dans une chaîne donnée.

Le mot anglais " pattern " est utilisé pour désigner un modèle, une structure, un motif, un type, etc.

La forme la plus simple d'un pattern est un mot qui ne correspond qu'à une copie de lui-même.

Par exemple, le pattern "bonjour" recherche la chaîne "bonjour" à l'intérieur de la chaîne sujet.

Quand string.find() trouve son pattern, il retourne deux valeurs:
--> L'indice du début et l'indice de fin.

	local s = "bonjour le monde"
	
	local i, j = string.find( s, "bonjour" )
	
	print( i, j ) --> 1 7 (-- les indices de début et de fin)
	
	print( string.find( s, "monde" )) --> 12 16 
				

Lua possède quelques fonctions sur les strings qui utilisent les patterns. Parmi elles, vous trouverez:

string.find(string, pattern)Cherche la première instance du pattern dans la string
string.gsub(string, pattern, remplace)Retourne une string où toutes les instances de pattern ont été remplacées par remplace
string.match(string, pattern, [init])Retourne une ou plusieurs instances de pattern trouvées dans string.
[init] est optionnel et spécifie l'endroit où démarrer la recherche

Mais vous pouvez faire des patterns plus performants que "bonjour", avec les classes de caractères.

Une classe de caractères est un élément dans un pattern qui peut correspondre à tout caractère dans un ensemble spécifique.

Par exemple, la classe %d correspond à n'importe quel chiffre.
Par conséquent, vous pouvez rechercher une date au format dd/mm/yyyy avec le pattern "%d%d/%d%d/%d%d%d%d"

	local s = "la date limite est le 12/12/2012."
	
	local date = "%d%d/%d%d/%d%d%d%d"
	
	print(string.sub(s, string.find(s, date))) 
	
		--> Ce qui donne: 12/12/2012
				

Les combinaisons suivantes sont autorisées à décrire une classe de caractères qui représente:

%an'importe quelle lettre.
%cn'importe quel caractère de contrôle.
%dn'importe quel chiffre.
%ln'importe quelle lettre minuscule.
%pn'importe quel caractère de ponctuation.
%sn'importe quel caractère d'espace.
%un'importe quelle lettre majuscule.
%wn'importe quel caractère alphanumérique.
%xn'importe quel chiffre hexadécimal.
%zn'importe quel caractère avec une représentation "\0".

Une version MAJUSCULE d'une de ces classes, représente le contraire de la classe.
Par exemple, "%A" représente tous les caractères non-lettre.

L'exemple suivant, remplace tout ce qui n'est pas lettre, par l'étoile (*)

	print(string.gsub("hello, up-down!", "%A", "*"))
	
		--> Ce qui donne: hello**up*down* 4
		
	-- Le chiffre 4, représente ici, le nombre de substitutions.	
				

Quelques caractères, appelés caractères magiques, ont une signification particulière lorsqu'ils sont utilisés dans un pattern.

Les caractères magiques sont: ( ) . % + - * ? [ ^ $

()pour former un groupe ou une sous-expression qui sera souvent appelé
 .représente n'importe quel caractère
%sert d'échappement pour les caractères magiques
+une ou plusieurs répétitions du pattern
-zéro ou plusieurs répétitions du pattern pour les petites séquences
*zéro ou plusieurs répétitions du pattern pour les grandes séquences
?zero ou une répétition du pattern. (rend facultatif le pattern suivant).
[démarre une séquence: [a-z]
^recherche de chaîne de caractères commençant par...
$recherche de chaîne de caractères se terminant par...

Le point (.) représente un caractère magique, qui peut représenter n'importe quel caractère.

"%" fonctionne comme un caractère d'échappement pour les caractères magiques.
Ainsi, "%." correspond à un point et "%%" correspond au caractère "%" lui-même.

Si vous avez besoin de mettre une apostrophe dans un pattern, vous devez utiliser les mêmes techniques que vous utiliseriez pour placer un guillemet à l'intérieur d'une autre chaîne: par exemple, vous pouvez échapper le guillemet avec un contre-slash, "\", qui est le caractère d'échappement pour Lua.

Un ensemble de caractères, vous permet de créer vos propres classes, en les combinant à l'intérieur de crochets.
Par exemple, "[%w_]" correspond à la fois à des caractères alphanumériques (w) et des caractères de soulignement (_).

L'ensemble "[01]" correspond aux chiffres binaires, et "[%[%]]" correspond à des crochets.

Pour compter le nombre de voyelles CAPITALES et minuscules dans un texte, vous pouvez écrire:

	local texte = "Pour compter le nombre de voyelles"		
	
	local _, nbVoyelles = string.gsub( texte, "[AEIOUYaeiouy]", "" )
	
	print(nbVoyelles)
	
		--> Ce qui donne: 12
				

Le _ est juste un nom fictif de variable.

Vous pouvez également inclure les plages de caractères dans un ensemble de caractères, en écrivant le premier et le dernier caractères de la gamme séparés par un tiret.

Vous aurez rarement besoin de cette facilité, car la plupart des gammes utiles sont déjà prédéfinies.

Par exemple, "%d" est plus simple que "[0-9]" de même, "%x" est plus simple que "[0-9a-fA-F]".

Toutefois, si vous avez besoin de trouver un chiffre octal, alors vous préférerez peut-être "[0-7]", au lieu d'une énumération explicite tel que: "[01234567]".

Vous pouvez obtenir le contraire d'un jeu de caractères en le commençant par "^".
Par exemple, "[^0-7]" trouve n'importe quel caractère qui n'est pas un chiffre octal et "[^\n]" correspond à tout caractère différent de saut de ligne.

Mais n'oubliez pas que vous pouvez annuler des classes simples avec sa version capitale: "%S" est plus simple que "[%^s]".

Les classes de caractères suivent la localisation courante définie par Lua.
Par conséquent, la classe "[a-z]" peut être différente de "%l".
Dans certains cas appropriés, cette dernière forme comprend des lettres telles que "ç" et "ã".
Vous devriez toujours utiliser la dernière forme, sauf si vous avez une bonne raison de faire autrement.
C'est plus simple, plus portable, et un peu plus efficace.

logo wxWidgets Le savoir ne vaut que s'il est partagé par tous...
logo-internet_32x32.png Dernière mise à jour, le 7 décembre 2012.
Valid XHTML 1.0 Transitional

wxlualogo
Flèche haut
Flèche gauche
Flèche haut
Flèche droite