Partager via


Quantificateurs et correspondances vides

Mise à jour : novembre 2007

Les quantifieurs *, +, {n,m} (et leurs équivalents « paresseux ») ne se répètent jamais après une correspondance vide lorsque le nombre minimal n a été atteint. Cette règle empêche les quantifieurs d'entrer dans des boucles infinies sur des correspondances vides lorsque m est infini (bien que la règle s'applique même si m n'est pas infini).

Par exemple, (a?)* correspond à la chaîne « aaa » et capture les sous-chaînes selon le modèle (a)(a)(a)(). Vous remarquez qu'il n'y a pas de cinquième capture vide, parce que la quatrième capture entraîne l'arrêt de la répétition du quantifieur.

De la même façon, (a\1|(?(1)\1)){0,2} correspond à la chaîne vide plutôt qu'à « a » parce qu'il n'essaie jamais le développement ()(a).. Le quantifieur {0,2} n'autorise que des correspondances vides dans la dernière itération. Par opposition, (a\1|(?(1)\1)){2} correspond réellement à « a » parce qu'il essaie ()(a) ; le nombre minimal d'itérations, 2, force le moteur à effectuer une répétition après une correspondance vide.

Voir aussi

Autres ressources

Expressions régulières du .NET Framework