Quantificateurs dans JScript
Mise à jour : novembre 2007
Si vous ne pouvez pas spécifier le nombre de caractères compris dans une correspondance, les expressions régulières prennent en charge le concept des quantificateurs. Ces quantificateurs vous permettent de préciser le nombre d'occurrences d'un composant donné d'une expression régulière pour qu'une correspondance soit vraie.
Que signifient les quantificateurs ?
Caractère |
Description |
---|---|
* |
Correspond zéro ou plusieurs fois au caractère ou à la sous-expression qui précède. Par exemple, zo* correspond à z et à zoo. * équivaut à {0,}. |
+ |
Correspond une ou plusieurs fois au caractère ou à la sous-expression qui précède. Par exemple, zo+ correspond à zo et à zoo mais pas à z.+ équivaut à {1,}. |
? |
Correspond zéro ou une fois au caractère ou à la sous-expression qui précède. Par exemple, certain(es)? correspond à certain dans certain ou certaines. ? équivaut à {0,1}. |
{n} |
n est un entier non négatif. Correspond exactement n fois. Par exemple, « o{2}» ne correspond pas au o de Bob, mais correspond aux deux o de zoo. |
{n,} |
n est un entier non négatif. Correspond au moins n fois. Par exemple, o{2} ne correspond pas au o de Bob, mais correspond à tous les o de zooooo. o{1,} équivaut à o+. o{0,} équivaut à o*. |
{n,m} |
m et n sont des entiers non négatifs, où n <= m. Correspond au moins n fois et au plus m fois. Par exemple, o{1,3} correspond aux trois premiers o de zoooooo. o{0,1} équivaut à o?. Notez qu'il ne peut y avoir d'espace entre la virgule et les nombres. |
Dans la mesure où les numéros de chapitre peuvent souvent dépasser le chiffre neuf dans un document d'entrée de grande taille, vous devez pouvoir gérer des numéros de chapitre à deux ou trois chiffres. Les quantificateurs vous en offrent la possibilité. L'expression régulière suivante correspond à des titres de chapitre affichant n'importe quel nombre de chiffres :
/Chapter [1-9][0-9]*/
Notez que le quantificateur est placé après l'expression de la plage. Par conséquent, il s'applique à toute l'expression de la plage qui dans ce cas spécifie uniquement des chiffres de 0 à 9 compris.
Le quantificateur + n'est pas utilisé ici dans la mesure où la présence d'un chiffre en deuxième position ou plus n'est pas nécessaire. Le caractère ? n'est pas employé non plus puisqu'il limite les numéros de chapitre à deux chiffres uniquement. Vous souhaitez faire correspondre au moins un chiffre après le mot Chapter et un espace.
Si vous savez qu'il n'y a pas plus de 99 chapitres, vous pouvez utiliser l'expression suivante pour spécifier au moins un mais pas plus de deux chiffres.
/Chapter [0-9]{1,2}/
L'inconvénient de l'expression ci-dessus est qu'un numéro de chapitre supérieur à 99 correspondra toujours uniquement aux deux premiers chiffres. D'autre part, Chapter 0 sera également une correspondance. Il existe des expressions mieux adaptées pour faire correspondre uniquement les deux premiers chiffres, et notamment :
/Chapter [1-9][0-9]?/
- ou -
/Chapter [1-9][0-9]{0,1}/
Les quantificateurs *, + et ? sont tous qualifiés de gourmands parce qu'ils correspondent à autant de texte que possible. Toutefois, il peut arriver parfois que vous souhaitiez uniquement une correspondance minimale.
Vous pouvez, par exemple, rechercher dans un document HTML une occurrence d'un titre de chapitre placé dans une balise H1. Ce texte se présente dans votre document sous la forme suivante :
<H1>Chapter 1 – Introduction to Regular Expressions</H1>
L'expression suivante correspond à tout ce qui figure entre le symbole inférieur à (<) d'ouverture et le symbole supérieur à (>) fermant la balise H1.
/<.*>/
Si vous souhaitez ne faire correspondre que la balise d'ouverture H1, l'expression ci-dessous, non gourmande, correspond uniquement à <H1>.
/<.*?>/
En plaçant ? après le quantificateur *, + ou ?, l'expression précédemment gourmande devient une correspondance minimale, ou non gourmande.