Correspondance suivant une correspondance vide

Lorsqu'une correspondance est répétée dans une chaîne, soit en appelant NextMatch soit en utilisant la collection retournée par Regex.Matches, le moteur des expressions régulières destine aux correspondances vides un traitement spécial.

NextMatch commence en général la correspondance suivante à l'endroit exact où la correspondance précédente s'est arrêtée. Cependant, après une correspondance vide, NextMatch avance d'un caractère supplémentaire avant d'essayer la correspondance suivante. Cette règle a pour but de garantir la progression du moteur de recherche des correspondances dans la chaîne. (S'il n'y avait pas cette avance d'un caractère supplémentaire, la correspondance suivante commencerait exactement au même endroit que la correspondance précédente et la recherche resterait indéfiniment sur la même chaîne vide.)

Par exemple, une recherche de « a* » dans la chaîne « abaabb » retourne la séquence de correspondances suivantes.

« a », «», « aa », «», «», «»

Voici le résultat obtenu en contexte :

(a)()b(aa)()b()b()

La première correspondance tombe sur le premier a. La deuxième correspondance démarre exactement à l'endroit où la première s'est terminée, avant le premier b ; elle ne trouve aucune occurrence de a et retourne la chaîne vide.

La troisième correspondance ne commence pas exactement à l'endroit où s'est terminée la deuxième, parce que la deuxième correspondance a retourné la chaîne vide. À la place, elle commence un caractère plus loin, après le premier b. La troisième correspondance trouve deux occurrences de a et retourne « aa ».

La quatrième correspondance commence là où s'est terminée la troisième, avant le deuxième b, puis trouve la chaîne vide. La cinquième correspondance commence ensuite avant le dernier b et retrouve la chaîne vide. La sixième correspondance commence après le dernier b et trouve une nouvelle fois la chaîne vide.

Voir aussi

Autres ressources

Expressions régulières du .NET Framework