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