====== regsub ====== Effectue des substitutions de chaînes basées sur l'identification d'expressions rationnelles ===== Syntaxe ===== regsub ?switches? exp string subSpec varName ===== Description ===== Cette commande cherche une correspondance de l'expression //exp// dans //string//, et elle copie //string// dans la variable dont le nom est donné par //varName// (la correspondance avec les expressions rationnelles est décrite dans la page de référence de [[:faq:re_syntax]]). S'il y a une correspondance, alors pendant la copie de //string// vers //varName//, la partie de "string" qui correspond à "exp" est remplacée par //subSpec//. Si //subSpec// contient un & ou \0, cette séquence est remplacée lors de la substitution, par la partie de chaîne qui correspond à "exp". Si //subSpec// contient un \n où n est un chiffre entre 1 et 9, cette séquence est remplacée pendant la substitution par la partie de chaîne qui correspond à la n_ième sous expression de "exp". Pour éviter cette interprétation spéciale de &, \0 ou \n, on peut ajouter des antislashs additionnels. Attention, l'usage d'antislashs dans //subSpec// tend à provoquer des conflits avec l'emploi des antislashs dans le parser de Tcl, c'est pourquoi il est souvent plus sûr d'encadrer //subSpec// par des accolades s'il contient des antislashs. Si les arguments initiaux de //regexp// commencent avec -, ils sont alors traités comme des //switchs//. Les switchs suivants sont actuellement reconnus: * **-all** : Toutes les séquences dans "string" qui interceptent "exp" sont trouvées et la substitution est faite sur chacune de ces séquences. Sans ce switch, seule la première séquence est substituée. Si **-all** est indiqué, alors les séquences ''&' et \n sont traitées pour chaque substitution en utilisation l'information de l'interception adéquate. * **-expanded** : Autorise l'utilisation d'expressions rationnelles étendues, où le blanc et les commentaires sont ignorés. Ceci est la même chose que d'indiquer l'option embarquée (?x). (voir [[:faq:re_syntax#meta_syntaxe]]) * **-line** : Autorise la sensibilité au retour-chariot (newline). Par défaut newline est un caractère ordinaire sans signification particulière. Avec ce switch, les expressions entre crochets '[^' et le '.' n'interceptent jamais newline, '^' intercepte une chaîne vide après newline en complément de sa fonction normale, et '$' intercepte une chaîne vide avant newline en plus de sa fonction normale. Ce switch est équivalent aux switchs -linestop et -lineanchor réunis, ou bien à l'option embarquée (?n). (voir [[:faq:re_syntax#meta_syntaxe]]) * **-linestop** Change le comportement des expressions entre crochets '[^' et l'expression '.' de façon qu'ils s'interrompent en rencontrant des retours chariots (newline). Ceci est équivalent à l'option embarquée (?p). (voir [[:faq:re_syntax#meta_syntaxe]]) * **-lineanchor** : Change le comportement des expression '^' et '$' (les ancres) de telle sorte qu'ils interceptent respectivement le début et la fin d'une ligne. Ceci est le même que d'indiquer l'option embarquée (?w). (voir [[:faq:re_syntax#meta_syntaxe]]) * **-nocase** Les lettres majuscules de "string" seront converties en minuscules avant d'être comparées à "exp"; cependant les substitutions indiquées par subSpec utilisent la forme originale, avant conversion, de "string". * **-start //index//** : Indique une position de caractère dans string, à partir de laquelle il faut commencer la recherche d'expression rationnelle. Quand on utilise ce switch, '^' n'interceptera pas le début de la ligne, et \A interceptera toujours le début de la chaîne à l'index indiqué. L'index sera contraint dans les limites effectives de la chaîne entrée. * **--** Marque la fin des switches. L'argument suivant cette fin sera traité comme étant l’expression "exp", même s'il commence par -. Cette commande renvoie le nombre de séquences qui ont été interceptées et remplacées. Voir le manuel [[:tcl:regexp]] pour des précisions sur l'interprétation des expressions rationnelles. ===== Exemples ===== ===== Voir aussi ===== [[:tcl:regexp]], [[:faq:re_syntax]], {{ :faq:regexp.pdf |}} {{tag>tcl "Expressions rationnelles"}}