• Aucun résultat trouvé

as Integer ' pour les résultats

Chaine = "Chaine :123, 456 et 789" ' Créer une chaîne pour les tests

Modele = "\d+" ' Créer le modèle à tester

Reg = New Regex(Modele) ' Initialiser la classe avec le modèle

Resultats = Reg.Matches(Chaine) ' Obtenir les résultats d'une recherche

For i = 0 To Resultats.Count - 1 ' Parcourir la collection des résultats

Console.WriteLine(Resultats(i).Value) ' pour les obtenir un par un

Next

Voici un large extrait des codes disponibles pour la définition des modèles recherchés : Codes Usages et exemples

\ La barre oblique inverse ne peut être employée seule dans un modèle. Elle permet d'utiliser un métacaractère comme caractère littéral ou de définir un caractère ordinaire comme métacaractère. Par exemple, n correspond au caractère n, mais \n correspond à une marque de fin de ligne. La séquence

\\ correspond à \ et \( correspond à (. Ou encore, $ est un métacaractère représentant la fin de la chaîne à traiter, mais \$ correspond au caractère $.

Chaine = "C:\Cours\VBNet"

Modele = "\\" ' Chaîne cherchée : \ 2 Résultats \ \

^ Indique que la recherche se fait seulement au début de la chaîne.

Chaine = "C:\Cours\VBNet"

Modele = "^C" ' Chaîne cherchée : C (en début) 1 Résultat C

Modele = "^V" ' Chaîne cherchée : V (en début) 0 Résultat

$ Indique que la recherche se fait seulement à la fin de la chaîne.

Chaine = "C:\Cours\VBNet"

Modele = "C$" ' Chaîne cherchée : C (à la fin) 0 Résultat

Modele = "Net$" ' Chaîne cherchée : Net (à la fin) 1 Résultat Net

* Joker pour le caractère qui le précéde, lequel peut être présent de 0 à n fois dans la chaîne recherchée.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "Co*" ' Chaîne cherchée : C à Cooooo …. 3 Résultats C Co Coo

+ Joker pour le caractère qui le précéde, lequel peut être présent de 1 à n fois dans la chaîne recherchée.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "Co+" ' Chaîne cherchée : Co à Cooooo … 2 Résultats Co Coo

? Joker pour le caractère qui le précéde, lequel peut être présent 0 ou 1 fois dans la chaîne recherchée.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "Co?" ' Chaîne cherchée : C et Co 3 Résultats C Co Co

. Le point est joker pour un et un seul caractère, quel qu'il soit, sauf la marque fin de ligne.

Chaine = "C:\Cours\VBNet\Calculs"

Modele = "C." ' Chaîne cherchée : C et un caractère 3 Résultats C: Co Ca

x|y|z| Le pipe est le OU logique du modèle. La chaine recherchée correspond à l'une des expressions x, y, z séparées par le | .

Chaine = "C:\Cours\VBNet\Cool"

Modele = "VB|Co*" ' Chaînes cherchées : VB ou C à Coooo … 4 Résultats C: Co VB Coo

{n} Les expressions entre accolades se rapportent au caractère qui précède l'accolade ouverte. Ici, le nombre n qui est un entier non négatif signifie que la chaîne cherchée correspondant à exactement n fois le caractère. Chaine = "C:\Cours\VBNet\Cool"

Modele = "Co{1}" ' Chaînes cherchées : Co 2 Résultats : Co Co

Modele = "o{2}" ' Chaînes cherchées : oo 1 Résultat oo

{n,} Les expressions entre accolades se rapportent au caractère qui précède l'accolade ouverte. Ici, le nombre n qui est un entier non négatif signifie que la chaîne cherchée correspondant à au moins n fois le caractère.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "Co{1,}" ' Chaînes cherchées : Co à Coooo … 2 Résultats Co Coo

Modele = "Co{2,}" ' Chaînes cherchées : Coo à Coooo … 1 Résultat Coo

Remarque : {1,} équivaut à + et {0,} équivaut à *.

{n,m} Les expressions entre accolades se rapportent au caractère qui précède l'accolade ouverte. Ici, les nombres n et m qui sont des entiers non négatifs, signifient que la chaîne cherchée correspondant à au moins n fois et au plus m fois le caractère.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "Co{1,1}" ' Chaînes cherchées : Co 2 Résultats Co Co

Modele = "Co{1,2}" ' Chaînes cherchées : Co et Coo 2 Résultats Co Coo

Remarque : {0,1} équivaut à ?.

[xyz] La recherche porte sur n'importe quel caractère de la chaîne placée entre les crochets.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "[:\\s]" ' Caractères cherchés : : \ s 5 Résultats \ s \ \

Modele = "[o]" ' Caractère cherché : o 3 Résultats o o o

[^xyz] La recherche porte sur n'importe quel caractère n'appartenant pas à la chaîne placée entre les crochets.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "[^oursetl]" ' Caractères cherchés : Tous sauf o u r s e t l

10 Résultats C : \ C \ V B N \ C

[a-z] La recherche porte sur n'importe quel caractère appartenant à la plage de caractères désignée par les bornes a et z.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "[A-Z]" ' Caractères cherchés : Toutes les majuscules 6 Résultats C C V B N C

[^a-z] La recherche porte sur n'importe quel caractère n'appartenant pas à la plage de caractères désignée par les bornes a et z.

Chaine = "C:\Cours\VBNet\Cool"

Modele = "[^a-z]" ' Caractères cherchés : Tous sauf les minuscules 10 Résultats C : \ C \ V B N \ C

\b Joker pour un seul caractère qui doit être un caractère d'espacement.

Chaine = "Par monts et par vaux, quelque part …"

Modele = "ar\b" ' Chaînes cherchées : ar suivie d'un blanc 2 Résultats ar ar

\B Joker pour un seul caractère qui ne peut être un caractère d'espacement.

Chaine = "Par monts et par vaux, quelque part …"

Modele = "ar\B" ' Chaînes cherchées : ar non suivie d'un blanc 1 Résultat ar

\s Signifie que le caractère précédent doit être suivi d'un espace, d'une tabulation, d'un saut de page, … . Remarque : \s équivaut à [\b\f\n\r\t\v].

\S Signifie que le caractère précédent ne peut être suivi d'un espace, d'une tabulation, … . Remarque : \S équivaut à [^\b\f\n\r\t\v].

\d Joker pour un seul caractère qui doit être un chiffre. \D Joker pour un seul caractère qui ne peut être un chiffre. \f \n \r

\t \v

Jokers pour un seul caractère d'échappement : \f pour un saut de page.

\n pour une marque de fin de ligne.

\r pour un retour chariot.

\t pour une tabulation.

\v pour une tabulation verticale.

\w Joker pour tout caractère numérique et alphabétique non accentué, ainsi que pour le caractère de soulignement.

Remarque : \w équivaut à [A-Za-z0-9_].

\W Joker pour tout caractère non numérique ni alphabétique non accentué, et différent du caractère de soulignement.

Remarque : \W équivaut à [^A-Za-z0-9_].

\nOct Le nombre nOct qui est un entier non négatif exprimé en octal représente le code ASCII du caractère cherché.

\xnHex Le nombre nHex qui est un entier non négatif exprimé en hexadécimal représente le code ASCII du caractère cherché.

(modèle) Les parenthèses permettent la création d'un modèle composé de plusieurs groupes (ou sous modèles) et de récupérer ensuite les chaînes trouvées et leurs sous groupes distinctement.

Le code présenté avant ce tableau, qui a servi à l'expérimentation de tous les modèles précédents, peut toujours être utilisé mais il ne permet pas la pleine exploitation des groupes.

Avec ce code :

Chaine = "C:\Cours\VBNet\Cool\VBNet\Cool"

Modele = "(VBNet)\\(Cool)" ' Chaînes cherchées : VBNet, Cool et VBNet\Cool 2 Résultats VBNet\Cool VBNet\Cool (sans distinction de VBNet et Cool)

En modifiant le code précédent comme ci dessous, la même expérimentation donne davantage de résultats : ' … For i = 0 To Resultats.Count - 1 For j = 0 To Resultats(i).Groups.Count - 1 Console.WriteLine(Resultats.Groups(i).Value) Next Next

Avec le code modifié :

Chaine = "C:\Cours\VBNet\Cool\VBNet\Cool"

Modele = "(VBNet)\\(Cool)" ' Chaînes cherchées : VBNet, Cool et VBNet\Cool 3 Résultats VBNet\Cool VBNet Cool (une chaîne complète et chaque sous groupes)

Modele = "((VBNet)\\(Cool)){1,}"

4 Résultats VBNet\Cool VBNet\Cool VBNet Cool

\num et ?<nom>

Le nombre num, qui est un entier de 1 à n, doit ici être utilisé après un groupe entre parenthèses. Il est l'index (de 1 à n) d'un sous groupe à répéter dans le modèle qui en contient de 1 à n. Il apporte une économie de dactylographie.

Chaine = "C:\Cours\VBNet\Cool\VBNet\Cool"

Modele = "(VBNet)\\(Cool)\\\1\\\2" ' Chaînes cherchées : VBNet, Cool et

3 Résultats VBNet\Cool\VBNet\Cool VBNet Cool VBNet\Cool\VBNet\Cool

Modele = "((VBNet)\\(Cool))\\\1"

4 Résultats VBNet\Cool\VBNet\Cool VBNet\Cool VBNet Cool

Les sous groupes peuvent en outre être nommés pour permettre l'usage de noms significatifs à la place des index. Il faut pour cela utiliser la syntaxe : Modele = "(?<Nom>Modele)". Les deux lignes suivantes de définition de modèle sont équivalentes.

Modele = "(?<GrpVb>VBNet)\\(?<GrpCo>Cool)\\\<GrpVb>\\\<GrpCo>" Modele = "(VBNet)\\(Cool)\\\1\\\2"

Membres Options

La propriété Options est un paramètre de type RegexOptions passé au constructeur Regex pour modifier le mode de travail du moteur d'exploitation des expressions régulières.

Elle est définie par syntaxe Reg = New Regex(Modele, Option) avec de nombreuses valeurs possibles pour

Option dont RegexOptions.SingleLine, RegexOptions.MultiLine, RegexOptions.IgnoreCase et

RegexOptions.RightToLeft.

SingleLine Cette option modifie la signification du point (.) de sorte qu'il corresponde à n'importe quel caractère, sans l'exception de la marque de fin de ligne ( \n ).

MultiLine Cette option modifie la signification de ^ et $ de sorte qu'ils correspondent respectivement au début et à la fin de n'importe quelle ligne, et non simplement au début et à la fin de la chaîne entière.

IgnoreCase Cette option a pour effet que la recherche ne tient pas compte de la casse des caractères utilisés dans le modèle.

Chaine = "C:\Cours\VBNet\COOL\" Modele = "VB|Co"

Reg = New Regex(Modele, RegexOptions.IgnoreCase) ' Résultats Co VB CO

RightToLeft Cette option provoque le traitement de chaîne de la fin vers le début.

Chaine = "C:\Cours\VBNet\Cool\" Modele = "VB|Co|Net"

Reg = New Regex(Modele) ' Résultats Co VB Net Co

Reg = New Regex(Modele, RegexOptions.RightToLeft)' Résultats Co Net VB Co

La propriété Options de l'instance Regex contient l'information de l'option passée au constructeur.

Reg = New Regex(Modele, RegexOptions.IgnoreCase)

Console.WriteLine(Reg.Options.ToString) ' Affiche IgnoreCase

RightToLeft

La propriété RightToLeft de l'instance Regex contient la valeur True ou False selon que l'option RightToLeft a été passée au constructeur ou non.

Reg = New Regex(Modele, RegexOptions.RightToLeft)

Console.WriteLine(Reg.RightToLeft.ToString) ' Affiche True

IsMatch

Cette méthode exécute une recherche et retourne la valeur True si une occurrence du modèle a été trouvée, et False

dans le cas contraire.

Chaine = "C:\Cours\VBNet\COOL\" Modele = "VB|Co"

Reg = New Regex(Modele)

Console.WriteLine(Reg.IsMatch(Chaine).ToString) ' Affiche True

Match

La méthode Match d'une instance de Regex réalise la recherche et la lecture de la première occurrence du modèle dans la chaîne traitée.

Chaine = "C:\Cours\VBNet\COOl\" Modele = "VB|CO"

Console.WriteLine(Reg.Match(Chaine).ToString) ' Affiche VB

Reg = New Regex(Modele, RegexOptions.RightToLeft)

Console.WriteLine(Reg.Match(Chaine).ToString) ' Affiche CO

Matches

La méthode Matches d'une instance de Regex réalise la recherche et la lecture de toutes occurrences du modèle dans la chaîne traitée et retourne ses résultats dans une collection de type MatchCollection.

Dim Resultats As MatchCollection

Chaine = "C:\Cours\VBNet\Cool\" Modele = "VB|Co"

Reg = New Regex(Modele)

Resultats = Reg.Matches(Chaine) For i = 0 To Resultats.Count - 1

Console.WriteLine(Resultats(i).Value) ' Affiche Co VB Co

Next

Chaque élément de la collection dispose de membres utiles dont Count, NextMatch, Groups, Groups.Count,

Index et Groups.Index.

Count Cette propriété contient bien entendu le nombre de réponses stockées dans la MatchCollection. A la suite du code précédent :

Console.WriteLine(Resultats.Count) ' Affiche 3

NextMatch Cette méthode donne accès à l'élément suivant celui désigné dans une MatchCollection. Ainsi, les deux lignes de codes suivantes produisent le même affichage. A la suite du code précédent :

Console.WriteLine(Resultats(2)) ' Affiche Co

Console.WriteLine(Resultats(1).NextMatch) ' Affiche Co

Groups Cette propriété contient la collection des sous groupes de chaque élément de la MatchCollection. Toujours à la suite du code précédent :

For i = 0 To Resultats.Count - 1 Console.WriteLine(Resultats(i).Groups.Count) ' Affiche 1 1 1 Next For i = 0 To Resultats.Count - 1 For j = 0 to Resultats(i).Groups.Count - 1 Console.WriteLine(Resultats(i).Groups(j)) ' Affiche Co VB Co Next Next Chaine = "C:\Cours\VB\Cool\VB\Cool" Modele = "(VB)\\(Cool)\\\1\\\2" Reg = New Regex(Modele)

Resultats = Reg.Matches(Chaine)

Console.WriteLine(Resultats.Count) ' Affiche 1

Console.WriteLine(Resultats(0)) ' Affiche VB\Cool\VB\Cool

Console.WriteLine(Resultats(0).Groups.Count) ' Affiche 3

For i = 0 To Resultats(0).Groups.Count - 1

Console.WriteLine(Resultats(0).Groups(i)) ' Affiche VB\Cool\VB\Cool VB Cool

Next

Index Chaque élément stocké dans une MatchCollection, ou dans une collection de sous groupes, possède une propriété Index qui conserve la position dans sa chaîne d'origine du modèle trouvé. En modifiant les sorties du code précédent, on obtient :

Console.WriteLine(Resultats(0).Index) ' Affiche 9

For i = 0 To Resultats(0).Groups.Count - 1

Console.WriteLine(Resultats(0).Groups(i).Index) ' Affiche 9 9 12

Replace

La méthode Replace d'une instance de Regex réalise la recherche de toutes occurrences du modèle dans la chaîne traitée et retourne une autre chaîne dans laquelle ces occurrences ont été remplacées par une sous chaîne donnée.

Dim Chaine As String Dim Modele As String Dim Resultat As String Dim Reg As Regex

Chaine = "C:\Cours\VBNet\Cool\" Modele = "VB|Co+"

Reg = New Regex(Modele)

Resultat = Reg.Replace(Chaine, "XX")

Console.WriteLine(Resultat) ' Affiche C:\XXurs\XXNet\XXl\

Chaine = "Autant en emporte le vent" Modele = "en.*\bv"

Reg = New Regex(Modele)

Resultat = Reg.Replace(Chaine, "d'arg")

Console.WriteLine(Resultat) ' Affiche Autant d'argent

Split

La méthode Split d'une instance de Regex est tout à fait semblable à celle de la classe String, mais celle-ci permet la définition du modèle par l’usage des codes des expressions régulières et de leurs métacaractères. Les sous chaînes extraites par la méthode sont copiées dans un tableau de chaînes.

Dim Chaine As String

Dim Resultats() As String ' Tableau des résultats

Dim Reg As Regex

Dim Modele As String = "\W"

Chaine = "AZERTY, QWERTY sont des mots comme : Visual Studio; VB" Reg = New Regex(Modele)

Resultats = Reg.Split(Chaine) For Each S As String In Resultats Console.WriteLine(S)

Next

Affichage quand Modele est "\W" : AZERTY QWERTY sont des mots comme Visual Studio VB

Affichage quand Modele est "\W{1,}" : AZERTY QWERTY sont des mots comme Visual Studio VB