Tcl - Expressions régulières

La commande "regexp" est utilisée pour faire correspondre une expression régulière dans Tcl. Une expression régulière est une séquence de caractères contenant un modèle de recherche. Il se compose de plusieurs règles et le tableau suivant explique ces règles et leur utilisation correspondante.

Sr.No. Règle et description
1

x

Correspondance exacte.

2

[a-z]

Toute lettre minuscule de az.

3

.

N'importe quel caractère.

4

^

La chaîne de début doit correspondre.

5

$

La chaîne de fin doit correspondre.

6

\^

Séquence de jeu pour correspondre au caractère spécial ^. Vous pouvez également l'utiliser pour d'autres caractères.

sept

()

Ajoutez les séquences ci-dessus entre parenthèses pour créer une expression régulière.

8

x*

Doit correspondre à 0 ou plusieurs occurrences du x précédent.

9

x+

Doit correspondre à une ou plusieurs occurrences du x précédent.

dix

[a-z]?

Doit correspondre à 0 ou 1 occurrence du x précédent.

11

{digit}

Correspond exactement aux occurrences de chiffres de l'expression regex précédente. Chiffre qui contient 0-9.

12

{digit,}

Correspond à 3 occurrences de chiffres ou plus de l'expression regex précédente. Chiffre qui contient 0-9.

13

{digit1,digit2}

Occurrences correspond à la plage entre les occurrences digit1 et digit2 de l'expression regex précédente.

Syntaxe

La syntaxe pour regex est donnée ci-dessous -

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Ici, regex est la commande. Nous verrons plus tard sur les commutateurs optionnels. Les modèles sont les règles mentionnées précédemment. La chaîne de recherche est la chaîne réelle sur laquelle l'expression régulière est exécutée. La correspondance complète est toute variable contenant le résultat du résultat regex correspondant. Submatch1 à SubMatchn sont des variables optionnelles subMatch qui contiennent le résultat des modèles de sous-correspondance.

Regardons quelques exemples simples avant de plonger dans des exemples complexes. Un exemple simple pour une chaîne avec tous les alphabets. Lorsqu'un autre caractère est rencontré dans l'expression régulière, la recherche sera arrêtée et renvoyée.

#!/usr/bin/tclsh

regexp {([A-Za-z]*)} "Tcl Tutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Full Match: Tcl
Sub Match1: Tcl

Modèles multiples

L'exemple suivant montre comment rechercher plusieurs modèles. Ceci est un exemple de modèle pour tous les alphabets suivi de n'importe quel caractère suivi de n'importe quel alphabets.

#!/usr/bin/tclsh

regexp {([A-Za-z]*).([A-Za-z]*)} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial

Une version modifiée du code ci-dessus pour montrer qu'un sous-modèle peut contenir plusieurs modèles est illustrée ci-dessous -

#!/usr/bin/tclsh

regexp {([A-Za-z]*.([A-Za-z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Commutateurs pour la commande Regex

La liste des commutateurs disponibles dans Tcl sont,

  • nocase - Utilisé pour ignorer la casse.

  • indices - Stockez l'emplacement des sous-modèles correspondants au lieu des caractères correspondants.

  • line- Nouvelle correspondance sensible à la ligne. Ignore les caractères après la nouvelle ligne.

  • start index - Définit le décalage du début du motif de recherche.

  • Marque la fin des commutateurs

Dans les exemples ci-dessus, j'ai délibérément utilisé [AZ, az] pour tous les alphabets, vous pouvez facilement utiliser -nocase au lieu de comme indiqué ci-dessous -

#!/usr/bin/tclsh

regexp -nocase {([A-Z]*.([A-Z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Un autre exemple utilisant des commutateurs est montré ci-dessous -

#!/usr/bin/tclsh

regexp -nocase -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"
regexp -nocase -start 4 -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b  
puts "Full Match: $a"
puts "Sub Match1: $b"

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Full Match: Tcl 
Sub Match1: Tcl 
Full Match: Tutorial
Sub Match1: Tutorial