Quantifieurs
Mise à jour : Juillet 2008
Les quantificateurs indiquent combien d'instances de l'élément précédent (qui peut être un caractère, un groupe ou une classe de caractères) doivent être présentes dans l'entrée pour qu'une correspondance soit trouvée.
Quantificateurs dans les expressions régulières du .NET Framework
Le tableau suivant présente les quantificateurs pris en charge par les expressions régulières du .NET Framework. Les quantités n et m sont des constantes entières. Pour en savoir plus sur la différence entre les quantificateurs gourmands et paresseux, consultez la section « Quantificateurs gourmands et paresseux » à la suite du tableau.
Quantifieur |
Description |
---|---|
* |
Correspond zéro ou plusieurs fois à l'élément qui précède. Équivalent à {0,}. * est un quantificateur gourmand dont l'équivalent non gourmand est *?. Par exemple, l'expression régulière \b91*9*\b tente d'établir une correspondance avec le chiffre 9 après une limite de mot. 9 peut être suivi de zéro instance ou plus du chiffre 1, qui peut lui-même être suivi de zéro instance ou plus du chiffre 9. L'exemple suivant illustre cette expression régulière. La chaîne d'entrée comporte neuf chiffres dont cinq correspondent au modèle et quatre (95, 929, 9129 et 9919) n'y correspondent pas.
|
+ |
Correspond une ou plusieurs fois à l'élément qui précède. Équivalent à {1,}. + est un quantificateur gourmand dont l'équivalent non gourmand est +?. Par exemple, l'expression régulière \ba(n)+\w*?\b tente d'établir une correspondance avec les mots entiers qui commencent par la lettre a suivie d'une ou de plusieurs instances de la lettre n. L'exemple suivant illustre cette expression régulière. L'expression régulière établit une correspondance avec les mots an, annual, announcement et antique et pas avec les mots autumn et all.
|
? |
Correspond zéro ou une fois à l'élément qui précède. Équivalent à {0,1}. ? est un quantificateur gourmand dont l'équivalent non gourmand est ??. Par exemple, l'expression régulière \ban?\b tente d'établir une correspondance avec les mots entiers qui commencent par la lettre a suivie de zéro ou d'une instance de la lettre n. En d'autres termes, elle tente d'établir une correspondance avec les mots a et an. L'exemple suivant illustre cette expression régulière.
|
{n} |
Correspond exactement n fois à l'élément qui précède. {n} est un quantificateur gourmand dont l'équivalent non gourmand est {n}?. Par exemple, l'expression régulière \b\d+\,\d{3}\b tente d'établir une correspondance avec une limite de mot suivie d'un ou de plusieurs chiffres décimaux suivis de trois chiffres décimaux suivis d'une limite de mot. L'exemple suivant illustre cette expression régulière.
|
{n,} |
Correspond au moins n fois à l'élément qui précède. {n,} est un quantificateur gourmand dont l'équivalent non gourmand est {n}?. Par exemple, l'expression régulière \b\d{2,}\b\D+ tente d'établir une correspondance avec une limite de mot suivie d'au moins deux chiffres suivis d'une limite de mot et d'un caractère non numérique. L'exemple suivant illustre cette expression régulière. L'expression régulière ne peut pas établir de correspondance avec l'expression 7 days car elle ne contient qu'un chiffre. En revanche, une correspondance est établie avec 10 weeks et 300 years.
|
{n,m} |
Correspond au moins n fois mais pas plus de m fois à l'élément qui précède. {n,m} est un quantificateur gourmand dont l'équivalent non gourmand est {n,m}?. Par exemple, l'expression régulière (00\s){2,4} tente d'établir une correspondance avec deux à quatre occurrences de deux zéros suivis d'un espace. L'exemple suivant illustre cette expression régulière. Notez que la partie finale de la chaîne d'entrée inclut ce modèle cinq fois au lieu d'un maximum de quatre. En revanche, la partie initiale de cette sous-chaîne (jusqu'à l'espace et à la cinquième paire de zéros) correspond au modèle de l'expression régulière.
|
*? |
Correspond zéro fois ou plus à l'élément précédent, mais le moins de fois possible. Il s'agit d'un quantificateur paresseux qui est l'équivalent du quantificateur gourmand *. Par exemple, l'expression régulière \b\w*?oo\w*?\b établit une correspondance avec tous les mots qui contiennent la chaîne oo. L'exemple suivant illustre cette expression régulière.
|
+? |
Correspond une ou plusieurs fois à l'élément précédent, mais le moins de fois possible. Il s'agit d'un quantificateur paresseux qui est l'équivalent du quantificateur gourmand +. Par exemple, l'expression régulière \b\w+?\b établit une correspondance avec un ou plusieurs caractères séparés par des limites de mot. L'exemple suivant illustre cette expression régulière.
|
?? |
Correspond zéro ou une fois à l'élément précédent, mais le moins de fois possible. Il s'agit d'un quantificateur paresseux qui est l'équivalent du quantificateur gourmand ?. Par exemple, l'expression régulière ^(\s)*(System.)??Console.Write(Line)??\(?? tente d'établir une correspondance avec la chaîne Console.Write ou Console.WriteLine. La chaîne peut également inclure System. avant Console et être précédée d'une parenthèse ouvrante. Elle doit se trouver au début d'une ligne, mais peut être précédée d'un espace blanc. L'exemple suivant illustre cette expression régulière.
|
{n}? |
Correspond exactement n fois à l'élément qui précède. Il s'agit d'un quantificateur paresseux qui est l'équivalent du quantificateur gourmand {n}+. Par exemple, l'expression régulière \b(\w{3,}?\.){2}?\w{3,}?\b correspond exactement à deux ensembles de caractères suivis d'un point sur une limite de mot. Elle est ensuite suivie d'un autre ensemble de caractères et d'une limite de mot. Cette expression régulière doit identifier l'adresse d'un site Web. L'exemple suivant illustre l'expression régulière. Notez qu'elle correspond à www.microsoft.com et mdsn.microsoft.com, mais pas à mywebsite ou mycompany.com.
|
{n,}? |
Correspond au moins n fois à l'élément précédent, mais le moins de fois possible. Il s'agit d'un quantificateur paresseux qui est l'équivalent du quantificateur gourmand {n,}. Consultez l'exemple du quantificateur {n}? pour obtenir une illustration. L'expression régulière de cet exemple utilise le quantificateur {n,} pour établir une correspondance avec au moins trois caractères suivis d'un point. |
{n,m}? |
Correspond entre n et m fois à l'élément précédent, mais le moins de fois possible. Il s'agit d'un quantificateur paresseux qui est l'équivalent du quantificateur gourmand {n,m}. Par exemple, l'expression régulière \b[A-Z](\w*?\s*?){1,10}[.!?] correspond aux phrases qui contiennent entre un et dix mots. Elle établit une correspondance avec une limite de mot suivie d'une majuscule suivie de une à dix répétitions de zéro caractères alphabétiques ou plus et éventuellement d'un espace. La correspondance se termine par un point, un point d'exclamation ou un point d'interrogation. L'exemple suivant illustre cette expression régulière. Elle établit une correspondance avec toutes les phrases de la chaîne d'entrée à l'exception d'une phrase qui contient 18 mots.
|
Quantifieurs gourmands et paresseux
De nombreux quantificateurs existent en deux versions :
Une version gourmande.
Un quantificateur gourmand tente de correspondre autant de fois que possible à l'élément auquel il s'applique.
Une version non gourmande (ou paresseuse).
Un quantificateur non gourmand tente de correspondre le moins de fois possible à l'élément auquel il s'applique.
Pour illustrer la différence, vous pouvez imaginer une expression régulière extrêmement simple destinée à extraire les quatre derniers chiffres d'une chaîne de nombres telle qu'un numéro de carte de crédit. La version de l'expression régulière qui utilise le quantificateur gourmand * est \b.*([0-9]{4})\b. Cependant, dans le cas d'une chaîne qui contient deux nombres, elle ne peut afficher que les quatre derniers chiffres du deuxième nombre, comme le montre l'exemple suivant.
Dim greedyPattern As String = "\b.*([0-9]{4})\b"
Dim input1 As String = "1112223333 3992991999"
For Each match As Match In Regex.Matches(input1, greedypattern)
Console.WriteLine("Account ending in ******{0}.", match.Groups(1).Value)
Next
' The example displays the following output:
' Account ending in ******1999.
string greedyPattern = @"\b.*([0-9]{4})\b";
string input1 = "1112223333 3992991999";
foreach (Match match in Regex.Matches(input1, greedyPattern))
Console.WriteLine("Account ending in ******{0}.", match.Groups[1].Value);
// The example displays the following output:
// Account ending in ******1999.
Il ne s'agit pas du comportement souhaité. L'expression régulière ne parvient pas à afficher le premier nombre car le quantificateur * tente d'établir une correspondance autant de fois que possible avec l'élément qui précède et atteint ainsi la fin de la chaîne.
Une expression régulière équivalente qui utilise le quantificateur paresseux *? aboutit au comportement attendu, comme le montre l'exemple suivant.
Dim lazyPattern As String = "\b.*?([0-9]{4})\b"
Dim input2 As String = "1112223333 3992991999"
For Each match As Match In Regex.Matches(input2, lazypattern)
Console.WriteLine("Account ending in ******{0}.", match.Groups(1).Value)
Next
' The example displays the following output:
' Account ending in ******3333.
' Account ending in ******1999.
string lazyPattern = @"\b.*?([0-9]{4})\b";
string input2 = "1112223333 3992991999";
foreach (Match match in Regex.Matches(input2, lazyPattern))
Console.WriteLine("Account ending in ******{0}.", match.Groups[1].Value);
// The example displays the following output:
// Account ending in ******3333.
// Account ending in ******1999.
Dans la plupart des cas, les expressions régulières avec des quantificateurs gourmands et paresseux retournent les mêmes correspondances. Elles retournent le plus souvent des résultats différents lorsqu'elles sont utilisées avec le métacaractère « point » (. ), qui correspond à n'importe quel caractère.
Voir aussi
Autres ressources
Éléments du langage des expressions régulières
Historique des modifications
Date |
Historique |
Raison |
---|---|---|
Juillet 2008 |
Nombreuses modifications. |
Résolution des bogues de contenu. |